对类的属性使用foreach
本文关键字:foreach 属性 | 更新日期: 2023-09-27 18:26:04
我正在编写一个函数来更新表(SQLite)中的一行。有一次,我只需要更新该行的某些列。
我的视频类(和表)具有以下属性(和列):Id,Name,Lyric,Cover,Gendre,Url。(它们都是字符串)
现在,例如,我需要更新表中1行的歌词和封面,我使用的代码是:
string id = // still keep the old id, this's the PK of table;
string lyric = //get new lyric;
string cover = // get new cover;
Video item = new Video(){Id = id, Lyric = lyric, Cover = cover};
SQLiteAccess.EditVideoInfo(item);
这是EditVideoInfo
public static void EditVideoInfo(Video item)
{
var conn = new SQLiteConnection(mypath);
using (conn)
{
var list = conn.Query<Video>("SELECT * FROM Video WHERE Id =?", item.Id);
if (list.Count >0)
{
var editItem = list.First(); // -> Get the item need to updated
/// Here's where I'm stuck
conn.Update(editItem);
}
}
}
那么,如果新项的每个属性不为null,我如何读取"foreach"并更新到旧项的属性呢?
如下所示。
var props = typeof(Video).GetProperties(BindingFlags.Instance|BindingFlags.Public|BindingFlags.GetProperty|BindingFlags.SetProperty);
foreach (var prop in props) {
var propVal = prop.GetValue(item, null);
if (propVal != null)
prop.SetValue(editItem, propVal, null);
}
您可以使用反射来获取视频项的所有属性(查看http://msdn.microsoft.com/en-us/library/kyaxdd3x(v=vs.110).aspx),但解决方案会缓慢而混乱。只需为每个属性编写测试和更新代码。
我的第一个方法是创建一个字典
Dictionary<string, string> _properties = new Dictionary<string, string>();
_properties["id"] = "myID"
_properties["lyric"] = "some other string"
然后你可以用foreach 迭代它
foreach (var prop in _properties)
{
// do something with prop
}