2

我正在尝试创建一种属性的替代品,它接受多种类型作为输入/输出。

这是一个丑陋的解决方案的一些伪代码:

http://pastebin.com/gbh4SrZX

基本上我有一段数据,我需要能够为其分配多种类型,并做出相应的反应。我有一些要操作的数据,我需要有效的方法来管理在需要时从文件名加载它们,同时保持相同的代码,如果我正在处理已经加载的数据。

这太棒了:

SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();

data1.Data = "somefile.dat";
data2.Data = data1.Data;

而 SomeDataClass.Data 不是字符串类型。

4

3 回答 3

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!"
    }
}
于 2012-08-15T07:12:22.227 回答
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;
    }
}
于 2012-08-15T07:16:06.210 回答
0

不确定您要解决的问题到底是什么,但在我看来,您最好使用 byte[],处理从磁盘或其他地方加载的数据流。

还可以考虑仅对通用接口进行编码,而不是使用动态和对象。

于 2012-08-15T07:22:20.667 回答