标签: expandoobject

有没有办法在动态/扩展中执行链式空检查?

C# 有有用的Null Conditional Operator。在这个答案中也有很好的解释。

我想知道当我的对象是动态/扩展对象时是否可以进行类似的检查。让我向您展示一些代码:

鉴于此类层次结构

public class ClsLevel1
{
    public ClsLevel2 ClsLevel2 { get; set; }
    public ClsLevel1()
    {
        this.ClsLevel2 = new ClsLevel2(); // You can comment this line to test
    }        
}

public class ClsLevel2
{
    public ClsLevel3 ClsLevel3 { get; set; }
    public ClsLevel2()
    {
        this.ClsLevel3 = new ClsLevel3();
    }       
}

public class ClsLevel3
{
    // No child
    public ClsLevel3()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我执行这种链式空检查,它会起作用

ClsLevel1 levelRoot = new ClsLevel1();
if (levelRoot?.ClsLevel2?.ClsLevel3 != null) …
Run Code Online (Sandbox Code Playgroud)

.net c# dynamic expandoobject

3
推荐指数
1
解决办法
1263
查看次数

为什么 ExpandoObject 比 Dictionary 慢得多?

我做了两个测试。

1- 添加 100k 个元素需要多长时间。

2- 他可以在 10 秒内使用 10 万个元素进行多少次搜索。

我的结果是这些

ExpandoObject 添加计数器 97075

字典添加计数器 35

ExpandoObject 搜索计数器 2396

字典搜索柜台 1957637

结论:

添加 ExpandoObject 元素要慢 2773 倍。

搜索 ExpandoObject 元素的速度慢了 817 倍。

为什么 ExpandoObject 比 Dictionary 慢得多?

using System;
using System.Dynamic;
using System.Collections.Generic;
using System.Threading;

namespace c_sharp_benchmark

{
    class Program
    {
        static void Main(string[] args)
        {
            BenchmarkExpandoObjectAdd();
            BenchmarkDictionaryAdd();
            BenchmarkExpandoObjectSearch();
            BenchmarkDictionarySearch();
        }
        static void BenchmarkExpandoObjectAdd()
        {
            dynamic exp = new ExpandoObject();
            var expid = (IDictionary<string, object>)exp;
            Random rnd = new …
Run Code Online (Sandbox Code Playgroud)

c# dictionary expandoobject

3
推荐指数
1
解决办法
260
查看次数

c#动态ExpandoObjects名称的句点?

也许这是一个愚蠢的问题,但我正在开发一个项目,希望我生成一些看起来像这样的JSON:

{'action.type':'post', 'application':APP_ID}
Run Code Online (Sandbox Code Playgroud)

在C#中,我正在尝试创建这个"action.type"属性,其值为"post".我该怎么办?以下是我通常会创建以下内容的方法:

dynamic ActionSpec = new ExpandoObject();
ActionSpec.SomeParam = "something";
ActionSpec.id = 12345;
Run Code Online (Sandbox Code Playgroud)

我不能去"ActionSpec.action.type",因为它不会输出所需的"action.type".这有意义吗?谢谢!

c# expandoobject facebook-ads-api

2
推荐指数
1
解决办法
631
查看次数

为什么我不能在隐式转换中返回接口,但ExpandoObject可以吗?

我有一个DynamicObject,我希望它可以转换为IDictionary,完全相同的方式ExpandoObject.例如,将ExpandoObject强制转换为IDictionary是完全有效的:

dynamic ex = new ExpandoObject ();
ex.Field = "Foobar";
IDictionary<string, object> dict = ex as IDictionary<string, object>;
Console.WriteLine (dict["Field"]);
Run Code Online (Sandbox Code Playgroud)

现在我尝试将它实现到我自己的DynamicObject中:

public class MyDynamicObject : DynamicObject
{
    public Dictionary<string, object> members = new Dictionary<string, object> ();

    public override bool TryGetMember (GetMemberBinder binder, out object result)
    {
        if (members.ContainsKey (binder.Name)) {
            result = members[binder.Name];
            return true;
        }
        else {
            result = null;
            return false;
        }
    }
    public override bool TrySetMember (SetMemberBinder binder, object value)
    {
        this.members.Add (binder.Name, …
Run Code Online (Sandbox Code Playgroud)

c# casting interface dynamic expandoobject

2
推荐指数
1
解决办法
911
查看次数

为什么匿名类型不像ExpandoObject那样动态?

随着dynamic我们非常有动感指针,但不完全是一个动态对象.C#中真正的动态对象是ExpandoObject,但对于大多数人来说,这是一个非常未知的类.expando允许在运行时创建和删除成员,就像哈希(类似于JavaScript).

为什么ExpandoObject的优点是在一个单独的类中实现的,而不仅仅是,作为匿名类型的一个特性实现?

也许这不是一个好的举动,因为缺乏类型安全?或者可能是由于涉及(DLR)开销?

c# anonymous-types dynamic-typing expandoobject

2
推荐指数
1
解决办法
1483
查看次数

将对象扩展到数据表

我是新的 ExpandoObject(确实,我昨天才知道)。我有以下代码,想知道是否有某种方法可以将 ExpandoObject 转换为我不知道的 DataTable?或者我必须使用反射来自己转换它?

dynamic contacts = new List<dynamic>();

contacts.Add(new ExpandoObject());
contacts[0].Name = "Patrick Hines";
contacts[0].Phone = "206-555-0144";

contacts.Add(new ExpandoObject());
contacts[1].Name = "Ellen Adams";
contacts[1].Phone = "206-555-0155";
Run Code Online (Sandbox Code Playgroud)

c# datatable converter expandoobject

2
推荐指数
1
解决办法
3535
查看次数

ExpandoObject对象和GetProperty()

我正在尝试编写一个通用实用程序,以从.NET外部通过COM使用(/跳过长篇故事)。无论如何,我试图将属性添加到ExpandoObject,并且我需要获取PropertyInfo结构以传递给另一个例程。

using System.Collections.Generic;
using System.Diagnostics;
using System.Dynamic;
using System.Reflection;

public class ExpandoTest
{
    public string testThis(string cVariable)
    {
        string cOut = "";

        ExpandoObject oRec = new ExpandoObject { };
        IDictionary<string, object> oDict = (IDictionary<string, object>)oRec;

        oDict.Add(cVariable, "Test");

        Trace.WriteLine(cVariable);
        Trace.WriteLine(oDict[cVariable]);

        PropertyInfo thisProp = oRec.GetType().GetProperty(cVariable);

        if (thisProp != null)
        {
            cOut= "Got a property :)";
        }

        return cOut;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我总是在thisProp中获得null?我显然不明白,但我一直盯着它看了一天,却一无所获。感谢所有的帮助/批评!

c# dynamic expandoobject

2
推荐指数
1
解决办法
3338
查看次数

C#-动态添加对象(添加动态属性名称)

我正在尝试创建一些动态的ExpandoObject。我遇到了一个问题。

由于我不知道对象中这些不同属性的名称是什么,所以我不能这样:

var list = new ArrayList();

var obj = new ExpandoObject();
obj.ID = 1,
obj.Product = "Pie",
obj.Days = 1,
obj.QTY = 65

list.Add(obj);
Run Code Online (Sandbox Code Playgroud)

让我解释一下我的情况:我希望从随机数据库中获取数据(我不知道该数据,而是根据从UI中获得的信息构建一个连接字符串),因此我不知道我需要获取哪些数据。这可能是数据库表的示例

表销售

  • ID:int,
  • 产品:nvarchar(100),
  • 天数:int
  • 数量:bigint

这可能是另一个例子:

桌上足球吧

  • ID:int,
  • 天数:int
  • 数量:bigint
  • 产品编号:int
  • Department_Id:int

如您所见,我不知道数据库是什么样的(这是100%匿名的,因此它必须是100%动态的),并且我要返回的数据应该看起来像一个构造良好的JSON,如下所示:

[
  {
    "ID": 1,
    "Product": "Pie"
    "Days": 1,
    "QTY": 65
  },
  {
    "ID": 2,
    "Product": "Melons"
    "Days": 5,
    "QTY": 12
  }
]
Run Code Online (Sandbox Code Playgroud)

或者,使用另一个示例:

[
  {
    "ID": 1,
    "Days": 2,
    "QTY": 56,
    "Product_Id": 5,
    "Department_Id": 2
  }
  {
    "ID": 2, …
Run Code Online (Sandbox Code Playgroud)

c# json structure dynamic expandoobject

2
推荐指数
1
解决办法
9394
查看次数

如何在C#中将ExpandoObject转换为Dictionary?

我正在使用Jint在Xamarin应用程序中执行JavaScript.Jint正在将关联数组转换为ExpandoObject.我该如何使用这个对象?理想情况下,我想从中获取数据字典.

JavaScript返回:

return {blah:abc, bleh:xyz};
Run Code Online (Sandbox Code Playgroud)

Jint返回的Object调试器如下所示:

在此输入图像描述

javascript c# dictionary expandoobject

2
推荐指数
2
解决办法
9452
查看次数

从C#中的现有静态对象动态添加属性到Object

在我的ASP的.NET Web API应用,同时使DB调用,需要一些属性被添加到模型类已经有一些现有的属性.

我明白我可以使用ExpandoObject在这种情况下,并在运行时添加的属性,但我想知道如何首先从现有的对象继承所有的属性,然后添加一些.

例如,假设传递给方法的对象ConstituentNameInput被定义为

public class ConstituentNameInput
{
    public string RequestType { get; set; }
    public Int32 MasterID { get; set; }
    public string UserName { get; set; }
    public string ConstType { get; set; }
    public string Notes { get; set; }
    public int    CaseNumber { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string PrefixName { …
Run Code Online (Sandbox Code Playgroud)

c# dynamic expandoobject

2
推荐指数
1
解决办法
3746
查看次数