我正在尝试创建一种属性的替代品,它接受多种类型作为输入/输出。
这是一个丑陋的解决方案的伪代码:
基本上我有一些数据,我需要能够为它分配多种类型,并做出相应的反应。我有一些操作的数据,我需要有效的方法来管理在需要时从文件名加载它们,同时保持相同的代码,如果我正在处理已经加载的数据。
这太棒了:
SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();
data1.Data = "somefile.dat";
data2.Data = data1.Data;
而SomeDataClass.Data不是字符串的类型。
答案 0 :(得分:1)
您是否考虑过使用dynamic
?
class A {
public dynamic property1 { get; set; }
public dynamic property2 { get; set; }
}
class Program {
static void Main(string[] args) {
A a = new A();
A b = new A();
a.property1 = "hello world!";
b.property2 = a.property1;
Console.WriteLine(b.property2); // writes "hello world!"
}
}
答案 1 :(得分:0)
您可以使用隐式转换运算符(即
)执行大部分操作class SomeDataClass {
public SomeData Data {get;set;}
}
class SomeData {
static SomeData Load(string path) {
return new SomeData(); // TODO
}
public static implicit operator SomeData(string path)
{
return Load(path);
}
}
static class Program {
static void Main()
{
SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();
data1.Data = "somefile.dat"; // this is a load
data2.Data = data1.Data; // this is not a load
}
}
然而!坦率地说,我认为更明智地让操作明确:
class SomeDataClass {
public SomeData Data {get;set;}
}
class SomeData {
public static SomeData Load(string path) {
return new SomeData(); // TODO
}
}
static class Program {
static void Main()
{
SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();
data1.Data = SomeData.Load("somefile.dat");
data2.Data = data1.Data;
}
}
答案 2 :(得分:0)
不确定你要解决的问题究竟是什么问题,但在我看来,你更喜欢使用byte [],处理数据流,从磁盘加载或者在其他地方。
还要考虑只编码到一个通用接口,而不是使用动态和对象。