在类构造函数列表中接受通用数据类型。

问题描述 投票:-2回答:1

我想接受列表中的任何类型的数据,请大家帮忙,请看下面**中的方法和类方法。

public void SendEmail(string sender, EmailObjects emailObjects)

 public class EmailObjects 
    {
        public string EMAILLIST { get; set; }

        public string CC_EMAILLIST { get; set; }

        public string BCC_EMAILLIST { get; set; }

        public string subjectline { get; set; }

        **public List<T> lstOfValueToReplace { get; set; }**

        public string HTMLbody { get; set; }

        **public List<string>  lsthtmlBody { get; set; }**
    }
c#
1个回答
0
投票

这实际上取决于你的工作环境......

如果列表可以同时包含多种类型,你可以使用

List<object>

因为C#中的任何东西都是从对象类继承的。但是要小心,因为你将不知道类型是什么,你将不得不执行检查。

如果列表总是包含相同的数据类型,那么你可以使用generics .NET类,但这将意味着这个类的调用者知道它的类型。

public class EmailObjects<TtoReplace, ThtmlBody>
{
    [...]

    public List<TtoReplace> lstOfValueToReplace { get; set; }**

    public string HTMLbody { get; set; }

    public List<ThtmlBody>  lsthtmlBody { get; set; }**
}

但这将意味着这个类的调用者要知道哪些类型将包含在你的列表中。


0
投票

Martin Verjans的答案似乎是最简单的方法,但也许你可以使用

public List<dynamic> DynamicList {get;set;}

你可以通过这种方式检查对象类型。

 dynamic dynamicObject;

 dynamicObject = "I am a System.String";
 Console.WriteLine(dynamicObject.GetType()); //System.String

 dynamicObject = 420691337;
 Console.WriteLine(dynamicObject.GetType()); //System.Int32

 dynamicObject = new CustomClass
 {
    IntAttribute = 420691337,
    StringAttribute = "I am a System.String"
 };
 Console.WriteLine(dynamicObject.GetType()); //YourApplicationNamespace.CustomClass

动态类型可以是有用的,特别是当你从API调用中获取的对象反序列化时,因为你可以使用预期的属性名来访问值。

var contacts = JsonConvert.DeserializeObject<dynamic>(contactsResponse.Content);
if (contacts.totalElements > 0) {
   // Do stuff
}

如果你的目标是.NET Framework,你需要引用Microsoft.CSharp,但对于.NET Core似乎不是这样。

© www.soinside.com 2019 - 2024. All rights reserved.