2014-11-25 68 views
0

这是一个由例子,所以不要对我嚷嚷,这是一个不好的设计:)如何在属性中提供对成员字段的引用?

假设我有:

class UserInfo 
{ 
    SomeType1 member1; 

    SomeType2 member2; 

    SomeType3 member3; 


    Guid idInDB1; 

    Guid idInDB2; 
} 

每个成员无论是在DB1或DB2保存(不两者),并且对于每个成员,我想提供一个指向包含数据库标识的变量的属性。例如:

[DBReference(idInDB1)] 

这可能吗?

+1

属性是元数据,他们居住的类型或成员,它没有任何内容的定义。根据定义,您必须能够通过知道其使用的成员的类型而不是实际的实例来获取属性中的值。既然如此,你就没有办法将这个属性链接到实际数据。你可以做的是将数据库名称指定为字符串或使用枚举。 – 2014-11-25 08:40:57

+0

属性值必须是编译时间常量,这意味着它们在编译时最为人知,因为它们被视为元数据。你可以看看[这](http://stackoverflow.com/questions/14230414/c-workaround-for-setting-non-constant-value-to-an-attribute)一些hacky变通办法,我不会推荐。 – 2014-11-25 08:41:04

+0

@YuvalItzchakov我想提供一个变量的参考,而不是它的值 – Shmoopy 2014-11-25 08:42:04

回答

0

由于Guid s不能编译时间常量,因此使用string更容易,并将其转换为属性中的Guid

考虑这样的事情:

public class DBReferenceAttribute : Attribute 
{ 
    public DBReferenceAttribute(string guid) 
    { 
     this.Guid = new Guid(guid); 
    } 

    public Guid Guid { get; set; } 
} 

class UserInfo 
{ 
    [DBReference(idInDB1)] 
    string member1; 

    string member2; 

    string member3; 


    const string idInDB1 = "000"; 
} 
+0

我应该如何定义DBReference构造函数? – Shmoopy 2014-11-25 08:57:18

+0

请注意,idInDB1不是一个常量,我只知道它在运行时 – Shmoopy 2014-11-25 09:01:04

+0

@Shmoopy:请参阅代码中的构造函数。 – 2014-11-25 09:02:24

相关问题