我有一节课:
public class class1
{
public string Property1 {get;set;}
public int Property2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
哪个将被实例化:
var c = new class1();
c.Property1 = "blah";
c.Property2 = 666;
Run Code Online (Sandbox Code Playgroud)
所以忍受我(我是泛型的新手),我需要另一个具有泛型类型属性的类,以便可以使用Property1或Property2来设置Property3:
public class Class2
{
public GenericType Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够:
var c2 = new class2();
c2.Property3 = c1.Property2 // Any property of any type.
Run Code Online (Sandbox Code Playgroud)
Jon*_*onH 11
@bytenik我认为发起人要求将class3定义为包含泛型属性.这样他/她有一个来自class1或class2的属性,在这种情况下是一个字符串/ int,class3的属性可以处理这两种情况.
public class Class3<T>
{
public T Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我认为意图是海报想要这样做:
Class3.Property3 = Class2.Property2
Run Code Online (Sandbox Code Playgroud)
我认为海报需要将它投射到T型才能实现.
查看为示例发布的链接:创建一个通用属性
这是你可以做的:
namespace GenericSO
{
public class Class1
{
public int property1 { get;set;}
}
public class Class2<T>
{
public T property2 { get; set; }
}
class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
c1.property1 = 20;
Class2<int> c2 = new Class2<int>();
c2.property2 = c1.property1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意您的模板property2如何获取property1的值.你必须告诉它什么样的泛型.
public class class1<T>
{
public T Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
关于问题的编辑版本:
如果你需要一个可以用任何类型设置的属性,这里最合理的解决方案是简单地使用Object类型的属性.对于C#编译器,无法找到您之前推入属性设置器的确切类型的实例.