我想寫一個具有可選參數的方法。它應該更新一些對象,只保留那些給予它的參數,而保持其他屬性不變。只有可選參數的方法只能用於設置參數
有問題的部分:
- 空是所有對象的屬性
- 對象屬性的值不能讀取
比較有效的價值究竟應該的簽名方法是什麼,該方法的邏輯是什麼?
因此,可以說物體看起來是這樣的:
public class Foo
{
public int Id { get; set; }
public bool? MyBool { get; set; }
public int? MyInt { get; set; }
public string MyString { get; set; }
}
而且可以說,該方法是這樣的:
public void UpdateObject(int id, bool? optBool = null, int? optInt = null,
string optString = null)
{
var objectToUpdate = _fooList.FirstOrDefault(x => x.Id = id);
if(objectToUpdate != null)
{
// Update only set properties?
}
}
現在,我想調用該方法來更新不同部分的屬性我的申請是這樣的:
// at some part of app
UpdateObject(1, optInt: 5);
// will set the int property to 5 and leaves other properties unchanged
// at other part of app
UpdateObject(1, optString: "lorem ipsum");
// will set the string property and leaves other properties unchanged
// at other part of app
UpdateObject(1, optBool: null, optString: "lorem ipsum");
// will set the string and bool property and leaves other properties unchanged
請注意,只是設置值將不起作用,因爲它會覆蓋不需要的屬性爲空。
public void UpdateObject(int id, bool? optBool = null, int? optInt = null,
string optString = null)
{
var objectToUpdate = _fooList.FirstOrDefault(x => x.Id = id);
if(objectToUpdate != null)
{
// This is wrong
objectToUpdate.MyBool = optBool;
objectToUpdate.MyInt = optInt;
objectToUpdate.MyString = optString;
}
}
如果'null'是一個有效值,則需要用bool指示它應該被寫入的每個值,比如'new UpdateableProp {Name =「optBool」,Value = null}'。或者爲每個參數添加一個bool參數,表示相同。 –
CodeCaster
您可以使用['[Flags]'](https://stackoverflow.com/q/8447/1997232)類型的枚舉的單個屬性* code *哪些屬性必須被序列化。 – Sinatr