繁体   English   中英

将泛型数据类型接受到 class 构造函数列表中

[英]Accepting generic data type into a class constructor list

我想接受列表中的任何类型的数据,请帮忙。 请参阅**中的以下方法和 class 方法。

public void SendEmail(字符串发件人,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; }**
    }

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

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

List<object>

正如 C# 中的任何内容都继承自 object class。 但要小心,因为您不知道类型是什么,您必须对此进行检查。

如果列表始终包含相同的数据类型,则可以使用 generics:

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

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

    public string HTMLbody { get; set; }

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

但这将暗示此 class 的调用者知道哪些类型将包含在您的列表中。

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 调用中检索到的 object,例如,因为您可以使用预期的属性名称来访问该值。

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

如果您的目标是 .NET 框架,则需要参考 Microsoft.CSharp,.NET Core 似乎并非如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM