我知道有一些问题可以解决这个问题,但答案通常遵循推荐字典或参数集合的方式,这在我的情况下不起作用.
我正在使用一个通过反射工作的库,用具有属性的对象做很多聪明的事情.这适用于已定义的类以及动态类.我需要更进一步,按照这些方针做一些事情:
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#中有类似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) 我从驱动程序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,我正在大脑冻结如何做到这一点.一世
我上课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)
那不可能吗?
使用 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)