我正在尝试使用此签名为ExpandoObject分配方法(函数):
public List<string> CreateList(string input1, out bool processingStatus)
{
//method code...
}
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的代码,下面的代码不能编译:
dynamic runtimeListMaker = new ExpandoObject();
runtimeListMaker.CreateList =
new Func<string, bool, List<string>>(
(input1, out processingStatus) =>
{
var newList = new List<string>();
//processing code...
processingStatus = true;
return newList;
});
Run Code Online (Sandbox Code Playgroud)
不幸的是我无法更改CreateList签名,因为它会破坏向后兼容性,因此重写它不是一个选项.我试图通过使用委托解决这个问题,但在运行时,我得到了"无法调用非委托类型"异常.我想这意味着我没有正确分配代表.我需要帮助使语法正确(委托示例也可以).谢谢!!
这是我的代码:
public static class DynamicExtensions
public static void Add(this ExpandoObject obj, string path){
dynamic _obj = obj;
if (_obj == null) throw new ArgumentNullException("obj");
_obj.path = path;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我以这种方式调用它时,我得到"'System.Dynamic.ExpandoObject'的错误不包含'Add'的定义":
dynamic obj = new ExpandoObject();
obj.Add("p1");
Run Code Online (Sandbox Code Playgroud)
怎么解决?
提前致谢!
我必须在foreach循环中的expando对象中添加新属性,但我无法看到这样做的方法.这是一个例子:
var allProperties = new List {"Name","Email","Roles"}; allProperties.AddRange(metaDataModel.GetFormattedFolders());
dynamic expando = new ExpandoObject();
foreach (var s in allProperties)
{
expando.s = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
它将's'视为财产,而不是将's'的价值视为财产名称.
谢谢
我想使用 ExpandoObjects 列表作为 Telerik 报告的数据源,但 Telerik 报告目前似乎不支持此功能。他们确实支持将 XML 作为数据源,所以我试图将我的 ExpandoObjects 列表转换为 XML 字符串。
我已经看到(在Can I serialize an ExpandoObject in .NET 4?),可以通过 jsonFx 通过这个(VB.net 代码,而不是 c#)将单个 ExpandoObject 序列化为 XML 字符串:
dim XMLwriter As New JsonFx.Xml.XmlWriter
dim serializedExpando as string = XMLwriter.Write(obj)
Run Code Online (Sandbox Code Playgroud)
或其等效的 c# 代码:
JsonFx.Xml.XmlWriter XMLwriter = new JsonFx.Xml.XmlWriter();
String serializedExpando = XMLwriter.Write(obj);
Run Code Online (Sandbox Code Playgroud)
如何将整个列表序列化为 XML 字符串?
ExpandoObject有任何便利工厂方法吗?有点像,我不知道,
dynamic disney = new ExpandoObject("First", "Donald", "Last", "Duck");
Run Code Online (Sandbox Code Playgroud) 目前我有以下方法 -
public void CreateWorkbook<T>(List<T> ItemList)
{
PropertyInfo[] properties= typeof(T).GetProperties();
foreach (PropertyInfo prop in properties)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我想T用expando对象替换.但是我无法从expando对象中读取属性.
有什么办法吗?
我需要创建一个具有动态命名属性的对象,例如:
<users>
<user1name>john</user1name>
<user2name>max</user2name>
<user3name>asdf</user3name>
</users>
Run Code Online (Sandbox Code Playgroud)
这可能吗?
假设我有一个List<string>,其中每个字符串的长度相同。这个长度事先是不知道的,只能通过在运行时检查字符串的 Length 属性(比如第一个,因为它们的长度都相同)来确定。
我想要的是最终得到一组匿名对象,每个对象都有属性 C1、C2 等,每个角色一个。
因此,如果列表中的第一个字符串是“abcd”,那么结果列表中的第一个匿名对象将是...
{
C1 = "a",
C2 = "b",
C3 = "c",
C4 = "d"
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我一直在与动态和 ExpandoObjects 作斗争,但还没有设法使它们中的任何一个工作。主要问题似乎是事先不知道属性名称。
我尝试做类似的事情(循环)......
d["C" + i] = str.[j];
Run Code Online (Sandbox Code Playgroud)
...但这不起作用,因为它认为我正在尝试使用数组索引。我收到运行时异常“无法将 [] 索引应用于‘System.Dynamic.ExpandoObject’类型的表达式”
这可以做到吗?