我有一個類有許多代表客戶的自動字符串屬性。簡而言之,如下所示:減少重複結構的屬性
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
該數據來自客戶端,並使用Nuget包導入許多不同的文件。這些客戶端似乎正在將數據從數據庫生成的系統中複製出來,在這些系統中,我們有時會在某些字段中獲得字面的「NULL」字符串我想通過對現有代碼進行一些簡單的更改來簡化這些操作。我不希望引發錯誤,我只是希望它爲null而不是「NULL」(不是Address2的驗證失敗,而是用於LastName)。
因爲有很多導入,我在沒有源代碼的情況下使用了一個關閉Nuget的庫,所以我無法真正地捕獲到數據。在處理它之前,所有這些都會以相當少量的類結束,所以這似乎是做這件事的地方。我在這裏列出兩個領域,但是有十幾個領域,而且這不僅僅是一個班級。我們也使用ValueInjector很多,所以換一個自定義類的字符串並不是真正的選擇。
我能想到的最好的方法是撤消自動屬性並使用字符串擴展方法進行空檢查。這看起來像是一連串的反覆膨脹。有沒有什麼方法可以在一個屬性上定義這個動作,並且每次都這樣做,而不必將一行代碼轉換成十三十幾次?
public static class StringExtensions
{
public static string NullMeansNull(this string value)
{
if (value == "NULL")
return null;
else
return value;
}
}
public class Person
{
private string _FirstName;
public string FirstName
{
get
{
return this._FirstName.NullMeansNull();
}
set
{
this._FirstName = value;
}
}
private string _LastName;
public string LastName
{
get
{
return this._LastName.NullMeansNull();
}
set
{
this._LastName = value;
}
}
}
注意我不是在談論代碼格式。我們有足夠的StyleCop和CodeAnalysis規則來保持事物類似於上面的擴展,當它實際上是您想要閱讀的代碼時,這是很好的。
http://stackoverflow.com/questions/8388964/how-can-i-inherit-the-字符串類可能會幫助你(隱式操作符 - 使類作爲一個字符串) – Vladimir
這很有趣。我以前從來沒有見過隱式算子。不幸的是,ValueInjector對類型超級挑剔,只有在屬性類型完全相同的情況下才會複製屬性。它甚至不會將Guid複製到Nullable屬性中。 –
icrf