试着绕过这一个。请考虑以下代码。
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; }
}
问题出在SettingsDto类中。我的设置属性要我指定List&gt;的类型。我现在所知道的是T必须是一个结构。如何创建一个设置列表,以便我以后可以在运行时添加它。有办法解决这个问题吗?
非常感谢所有回复。
答案 0 :(得分:3)
您可以将通用参数转移到SettingsDto
:
public class SettingsDto<T> where T : struct
{
public List<Setting<T>> Settings { get; set; }
}
答案 1 :(得分:2)
您必须将T泛型类型传递给SettingsDto。
试试这个:
TouchListener
答案 2 :(得分:1)
只有在所有设置都有共同点的情况下才能执行此操作。考虑使用这样的界面:
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
}
}
答案 3 :(得分:0)
它必须是结构吗?否则你可以使用
public List<Setting<object>> Settings { get; set; }
并在需要时施放它。
如果不是出于性能原因,可以将结构放在类中。