尝试了一些搜索。可能是我缺乏知识,我没有使用正确的搜索术语,或者可能只是不理解答案。
我有一个传递对象的方法,我想将特定值输出到文本文件。 我已经知道该对象将是 List< someClass> 的几个不同的可能类(客户/员工/项目等)。但是所有类都包含相同的字符串属性(例如) string idNumber 。
这样的事情:
public static void OutputFile(object myInput)
{
foreach (someGenericObject in (List<anyType>)myInput)
{
string textToOutput = someGenericObject.idNUmber;
//output the text to somewhere else here
}
}
我觉得只要我知道它总会包含这个&#34; idNumber&#34;属性不管类型,我应该能够以某种方式引用它。但我似乎无法理解它?
我通常得到的错误是:
无法投射List&lt;员工&gt;列出&lt;对象&gt;等
提前致谢
答案 0 :(得分:1)
正如我在评论中所建议的那样,如果您能够修改这些类,则可以让它们都从具有IHasIdNumber
属性的接口idNumber
继承。
您的方法将成为:
public static void OutputFile(IEnumerable<IHasIdNumber> myInput)
{
foreach (var item in myInput)
{
string textToOutput = item.idNUmber;
//output the text to somewhere else here
}
}
答案 1 :(得分:1)
有几种方法可以解决这个问题。
推荐方式:实施通用界面:
SELECT cp.*
FROM `carparks` cp
LEFT JOIN `clients` cl ON cp.`carpark_id` = cl.`carpark_id`
LEFT JOIN `cars` c ON cl.`client_id` = c.`client_id`
WHERE cp.`carpark_id` IN (1, 3, 8, 33, 34, 38, 39)
GROUP BY cp.`carpark_id`
ORDER BY MAX(c.`created_at`) DESC
然后,可以传递给方法的所有可能类都将实现public interface INumberable { // I'm sure you can come up with a better name...
string IDNumber { get; set; }
}
。您的方法可以如下所示:
INumberable
不推荐的方式:反思:
public static void OutputFile(List<INumerable> myInput)
{
foreach (var someGenericObject in myInput)
{
string textToOutput = someGenericObject.idNUmber;
//output the text to somewhere else here
}
}
请注意,这不是很安全。
答案 2 :(得分:-1)
您可以使用[动态]。
Match match = Regex.Match("https://any-any.test.test2.com", "(http(s)?://)?.+-.+\.test.test2.com", RegexOptions.IgnoreCase);
if (match.Success) {
Console.WriteLine("OK");
}
答案 3 :(得分:-2)
如果所有类都具有您想要在foreach循环中访问的相同属性,则可以在via界面中进行。
public interface ISmth {
int MyProperty { get; set; }
}
public class Student : ISmth {
public int MyProperty { get; set; }
}
public class Employee : ISmth {
public int MyProperty { get; set; }
}
public static void DoSmth(object myObj) {
foreach(ISmth item in (List<object>)myObj) {
Console.Write(item.MyProperty);
}
}
List<Student> stdList = new List<Student>();
DoSmth(stdList.Cast<object>().ToList());