相关疑难解决方法(0)

在运行时动态添加C#属性

我知道有一些问题可以解决这个问题,但答案通常遵循推荐字典或参数集合的方式,这在我的情况下不起作用.

我正在使用一个通过反射工作的库,用具有属性的对象做很多聪明的事情.这适用于已定义的类以及动态类.我需要更进一步,按照这些方针做一些事情:

public static object GetDynamicObject(Dictionary<string,object> properties) {
    var myObject = new object();
    foreach (var property in properties) {
        //This next line obviously doesn't work... 
        myObject.AddProperty(property.Key,property.Value);
    }
    return myObject;
}

public void Main() {
    var properties = new Dictionary<string,object>();
    properties.Add("Property1",aCustomClassInstance);
    properties.Add("Property2","TestString2");

    var myObject = GetDynamicObject(properties);

    //Then use them like this (or rather the plug in uses them through reflection)
    var customClass = myObject.Property1;
    var myString = myObject.Property2;

}
Run Code Online (Sandbox Code Playgroud)

该库适用于动态变量类型,手动分配属性.但是我不知道预先添加了多少或哪些属性.

c# reflection properties dynamic

81
推荐指数
3
解决办法
15万
查看次数

如何使用动态扩展c#4.0中的现有对象

我希望在c#中有类似javascript的prototype属性.
这个想法是像在javascript中那样扩展类的实例.
我发现最接近的是使用ExpandoObject,但是你无法用现有对象初始化它.
另一个问题是您可以从ExpandoObject中取回原始对象.

这就是我想要做的

var originalObject = new Person();
originalObject.name = "Will";
var extendedObject = new ExpandoObject();
extendedObject.lastName = "Smith";

//do something

originalObject = (Person) extendedObject;
Run Code Online (Sandbox Code Playgroud)

c# dynamic c#-4.0

11
推荐指数
1
解决办法
5269
查看次数

可以将动态对象转换为ExpandoObject(c#)

我从驱动程序api(在dll中)获得了一个类型为"密封类"的动态对象.我想用一些额外的属性来装饰这个对象.

我想做一些事情的效果:

public void expandIT(dynamic sealedObject) {

    ExpandoObject expand = new ExpandoObject(sealedObject);
    expand.time = DateTime.Now();
    etc....
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我喜欢JCL的解决方案.但是对于我想要做的事情,创建一个ExpandoObject然后将Dynamic sealed class对象作为子属性嵌入,然后将我的属性添加到父ExpandoObject更容易.谢谢JCL,我正在大脑冻结如何做到这一点.一世

c# expandoobject c#-4.0

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

将类转换为动态并添加属性

我上课MyClass。我想将其转换为动态对象,以便添加属性。

这就是我所希望的:

dynamic dto = Factory.Create(id);
dto.newProperty = "123";
Run Code Online (Sandbox Code Playgroud)

我得到错误:

WEB.Models.MyClass does not contain a definition for 'newProperty'
Run Code Online (Sandbox Code Playgroud)

那不可能吗?

c#

4
推荐指数
1
解决办法
5949
查看次数

从 .Net Core 控制台应用程序更新 Firebase Firestore 中的文档

用例

使用 Firestore 作为持久性形式的 Angular Firebase 应用程序需要与 Discord Bot 通信。我已经构建了一个同步机器人来在现有的外部机器人和 Web 应用程序之间进行调解。有足够的信息来查找和更新文档。

问题

由于转换问题,更新不会发生。
例外:Unable to create converter for type Models.Participant

在尝试了几种解决方案后,主要是使用 json 转换,我简化了代码,以便更好地了解情况。我假设缺少一些明显的东西,但由于我对 firebase (firestore) 缺乏经验,我现在无法看到什么。

public async Task<bool> NextTurn(string encounterName)
{
    var encounterSnapshotQuery = await _encountersCollection.WhereEqualTo("name", encounterName).GetSnapshotAsync();

    foreach (DocumentSnapshot encounterSnapshot in encounterSnapshotQuery.Documents)
    {
        Dictionary<string, object> data = encounterSnapshot.ToDictionary();
        var name = data["name"].ToString();

        if (name == encounterName)
        {
            var participants = data["participants"].ToParticipants();
            var orderedParticipants = participants.OrderByDescending(x => x.initiative + x.roll).ToList();

            var current = orderedParticipants.Single(x => x.isCurrent != …
Run Code Online (Sandbox Code Playgroud)

c# firebase .net-core google-cloud-firestore

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