如何创建列表<;项目<;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必须是一个结构。我如何创建一个设置列表,以便稍后添加到其中——也许是在运行时。有办法绕过这个吗?
非常感谢您的回复。
您可以将通用参数转移到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; }
并在需要时铸造。
如果不是出于性能原因,可以将结构放入类中。