对类的属性使用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"并更新到旧项的属性呢?

对类的属性使用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
}