如何创建列表<;项目<;T>>;

本文关键字:lt gt 项目 列表 何创建 创建 | 更新日期: 2023-09-27 18:25:18

我只是想弄清楚这一点。请考虑以下代码。

public class Setting<T> where T: struct
{
    public string  Name { get; set; }
    public T Value { get; set; }
}
public class SettingsDto
{
    public List<Setting<>> Settings{ get; set; }
}

问题出现在SettingsTo类中。"我的设置"属性希望我为"列表>"指定一种类型。我现在只知道T必须是一个结构。我如何创建一个设置列表,以便稍后添加到其中——也许是在运行时。有办法绕过这个吗?

非常感谢您的回复。

如何创建列表<;项目<;T>>;

您可以将通用参数转移到SettingsDto:

public class SettingsDto<T> where T : struct
{
    public List<Setting<T>> Settings { get; set; }
}

您必须将T泛型类型传递给SettingsTo。

试试这个:

public class Setting<T> where T: struct 
{
    public string Name { get; set; }
    public T Value { get; set; }
}
public class SettingsDto<T> where T: struct
{
    public List<Setting<T>> Settings { get; set; }
}

只有在所有设置都有共同点的情况下才能执行此操作。考虑使用这样的接口:

public interface ISetting
{
    string Name { get; set; }
}
public class Setting<T> : ISetting
    where T : struct
{
    public string Name { get; set; }
    public T Value { get; set; }
}
public class SettingsDto
{
    public List<ISetting> Settings { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var set=new SettingsDto();
        set.Settings=new List<ISetting>();
        set.Settings.Add(new Setting<int>() { Name="Setting1", Value=100 });
        set.Settings.Add(new Setting<double>() { Name="Setting2", Value=Math.PI });
        set.Settings.Add(new Setting<DateTime>() { Name="Setting3", Value=DateTime.Now });
        set.Settings.Add(new Setting<int>() { Name="Setting4", Value=200 });
        foreach(var setting in set.Settings.OfType<Setting<int>>())
        {
            Console.WriteLine("{0}={1}", setting.Name, setting.Value);
        }
        // Setting1=100
        // Setting4=200
    }
}

它必须是struct吗?否则你可以使用

public List<Setting<object>> Settings { get; set; }

并在需要时铸造。

如果不是出于性能原因,可以将结构放入类中。