Sencha touch C#如何将Poco转换为列表<;Poco>;不知道你是哪一个poco';重复使用

Sencha touch C#如何将Poco转换为列表<;Poco>;不知道你是哪一个poco';重复使用,sencha-touch,asp.net-mvc-3,c#,reflection,poco,Sencha Touch,Asp.net Mvc 3,C#,Reflection,Poco,我有一个方法可以接受anyPOCO。然后,该方法需要能够检查POCO是否为列表。如果不是列表,则需要将其转换为列表 范例 MyCustomMethod(object input) { // if !input is list // convert input to list } 我会这样称呼它 MyCustomMethod(Pocos.foo); MyCustomMethod(Pocos.bar); 记住MyCustomMethod不知道发送给它的是什么poco。它只知道检查

我有一个方法可以接受anyPOCO。然后,该方法需要能够检查POCO是否为
列表
。如果不是列表,则需要将其转换为列表

范例

MyCustomMethod(object input)
{
    // if !input is list
    // convert input to list
}
我会这样称呼它

MyCustomMethod(Pocos.foo);
MyCustomMethod(Pocos.bar);
记住
MyCustomMethod
不知道发送给它的是什么poco。它只知道检查对象是否是列表,如果不是,则需要将其转换为同一对象的列表

最简单的方法是什么

编辑:

对此进行一些推理可能会有所帮助。我正在构建一个应用程序,
Ext.Data.Store
要求所有JSON数据都在一个数组中

我正在使用构建我的Web服务,我有一个自定义的
JsonPResult
。JsonPResult接受任何对象并将该对象作为JsonP返回。如果我给JSONPRESPULT发送一份清单,一切都很重要。如果我只是发送一个对象,Sencha Touch会呕吐,直到我将该对象放入数组


为了让事情保持干爽,我希望JsonPResult检查是否有任何对象是一个列表,并执行这项工作,而不是在每个控制器中重复我自己的操作。

您可以执行安全转换:

var list = obj as List<Poco>;
if (list != null)
   // It's a list and you now have a reference
else
    list = new List<Poco> { (Poco)obj };
var list=obj as list;
如果(列表!=null)
//这是一个列表,你现在有了一个参考
其他的
列表=新列表{(Poco)obj};
编辑要支持任何POCO,您需要使用泛型,因此这里有一个通用扩展方法:

public static IList<T> AsList<T>(this T item)
{
    var list = item as List<T>;
    if (list != null)
        return list;

    return new List<T>() { item };
}
公共静态IList AsList(此T项)
{
var list=项目作为列表;
如果(列表!=null)
退货清单;
返回新列表(){item};
}
还有一些例子:

string name = "Matt";
var list = name.AsList();

List<string> names= new List<string>() { "Matt" };
var list2 = names.AsList();
string name=“Matt”;
var list=name.AsList();
列表名称=新列表(){“Matt”};
var list2=names.AsList();

list
list2
都是字符串列表,但在第二个实例中,它直接返回了已转换的列表,而不是创建一个新列表并将自身插入其中。类型推断处理泛型参数,它可以应用于任何类型。

您可以执行安全强制转换:

var list = obj as List<Poco>;
if (list != null)
   // It's a list and you now have a reference
else
    list = new List<Poco> { (Poco)obj };
var list=obj as list;
如果(列表!=null)
//这是一个列表,你现在有了一个参考
其他的
列表=新列表{(Poco)obj};
编辑要支持任何POCO,您需要使用泛型,因此这里有一个通用扩展方法:

public static IList<T> AsList<T>(this T item)
{
    var list = item as List<T>;
    if (list != null)
        return list;

    return new List<T>() { item };
}
公共静态IList AsList(此T项)
{
var list=项目作为列表;
如果(列表!=null)
退货清单;
返回新列表(){item};
}
还有一些例子:

string name = "Matt";
var list = name.AsList();

List<string> names= new List<string>() { "Matt" };
var list2 = names.AsList();
string name=“Matt”;
var list=name.AsList();
列表名称=新列表(){“Matt”};
var list2=names.AsList();

list
list2
都是字符串列表,但在第二个实例中,它直接返回了已转换的列表,而不是创建一个新列表并将自身插入其中。类型推断处理泛型参数,它可以应用于任何类型。

我已经澄清了我的问题。我不确定这种方法是否有效,因为我不知道我使用的是哪种poco。删除我的,重新阅读@Rocki的问题显然支持@Matthew的答案。我已经澄清了我的问题。我不确定这种方法是否有效,因为我不知道我使用的是哪种poco。删除我的,重读@Rocki的问题显然支持@Matthew的答案。你用这种方法到底想实现什么?例如,为什么不将方法的参数设置为一个列表,从而要求调用方传入一个列表。@dlev-希望我上面的编辑有助于澄清。RE:您的编辑。DRY很好,但是如果您在发送之前只将单个对象打包到单个项目列表中,而不必费心处理其他需要的废话(即使这些废话只存在于一个地方),那么您的代码会更干净。您实际想用这种方法实现什么?例如,为什么不将方法的参数设置为一个列表,从而要求调用方传入一个列表。@dlev-希望我上面的编辑有助于澄清。RE:您的编辑。DRY很好,但是如果您在发送之前只将单个对象打包到单个项目列表中,而不是在其他地方处理您需要的废话(即使废话只存在于一个地方),那么您的代码就会干净得多