C# Generic foreach over IEnumerable 未知类型
C# Generic foreach over IEnumerable of unknown type
我正在尝试编写一个通用静态函数,它采用 IEnumerable class 的实例、属性 的名称和字符串分隔符。它将循环遍历实例,并对实例的每个成员求值 属性,将值 return 收集到由分隔符隔开的单个字符串中。
例如,如果我的集合 class 包含 Person 的实例并且 属性 名称是“Surname”,并且我的分隔符是“', '”,我可能 return :“史密斯”,'Kleine',“比彻姆”。然后我可能会用单引号将它括起来并将它用作 SQL.
中的列表
我的问题是我不知道如何遍历 IEnumerable。到目前为止我的代码:
public static string EnumerableItem2Str<T>(IEnumerable<T> oItems, string cPropertyName, string cSep)
{
string cOP = "";
try
{
foreach (<T> oItem in oItems)
{
cOP += CoreHelper.GetPropertyValue(oItems, cPropertyName).ToString();
if (oItem != oItems.Last()) cOP += cSep;
}
return cOP;
}
catch (Exception ex)
{
return "";
}
}
public static object GetPropertyValue(object o, string cPropertyName)
{
return o.GetType().GetProperty(cPropertyName).GetValue(o, null);
}
我在行 foreach (<T> oItem in oItems)
上遇到错误,其中第一个是 <T>
上的“预期类型”。
如何遍历 oItems
以获取其中包含的每个实例?
你可以这样做:
static string GetCsv<T>(IEnumerable<T> items, string separator)
{
return String.Join(separator, items.Select(x => x.ToString()).ToArray());
}
检查一下here
我想你想做这样的事情(它确实有一个空传播检查所以如果你使用的是旧版本的 C# 那么你需要删除 '.GetValue(i )'):
public static string EnumerableItem2Str<T>(IEnumerable<T> oItems, string cPropertyName, string cSep)
{
var propertyValues = oItems
.Select(i => i.GetType().GetProperty(cPropertyName)?.GetValue(i))
.Where(v => v != null)
.ToList();
return string.Join(cSep, propertyValues);
}
我正在尝试编写一个通用静态函数,它采用 IEnumerable class 的实例、属性 的名称和字符串分隔符。它将循环遍历实例,并对实例的每个成员求值 属性,将值 return 收集到由分隔符隔开的单个字符串中。
例如,如果我的集合 class 包含 Person 的实例并且 属性 名称是“Surname”,并且我的分隔符是“', '”,我可能 return :“史密斯”,'Kleine',“比彻姆”。然后我可能会用单引号将它括起来并将它用作 SQL.
中的列表我的问题是我不知道如何遍历 IEnumerable。到目前为止我的代码:
public static string EnumerableItem2Str<T>(IEnumerable<T> oItems, string cPropertyName, string cSep)
{
string cOP = "";
try
{
foreach (<T> oItem in oItems)
{
cOP += CoreHelper.GetPropertyValue(oItems, cPropertyName).ToString();
if (oItem != oItems.Last()) cOP += cSep;
}
return cOP;
}
catch (Exception ex)
{
return "";
}
}
public static object GetPropertyValue(object o, string cPropertyName)
{
return o.GetType().GetProperty(cPropertyName).GetValue(o, null);
}
我在行 foreach (<T> oItem in oItems)
上遇到错误,其中第一个是 <T>
上的“预期类型”。
如何遍历 oItems
以获取其中包含的每个实例?
你可以这样做:
static string GetCsv<T>(IEnumerable<T> items, string separator)
{
return String.Join(separator, items.Select(x => x.ToString()).ToArray());
}
检查一下here
我想你想做这样的事情(它确实有一个空传播检查所以如果你使用的是旧版本的 C# 那么你需要删除 '.GetValue(i )'):
public static string EnumerableItem2Str<T>(IEnumerable<T> oItems, string cPropertyName, string cSep)
{
var propertyValues = oItems
.Select(i => i.GetType().GetProperty(cPropertyName)?.GetValue(i))
.Where(v => v != null)
.ToList();
return string.Join(cSep, propertyValues);
}