标签: anonymous-objects

创建后将属性添加到匿名类型

我使用匿名对象将我的Html属性传递给一些辅助方法.如果消费者没有添加ID属性,我想在我的帮助方法中添加它.

如何向此匿名对象添加属性?

c# reflection anonymous-objects

99
推荐指数
3
解决办法
4万
查看次数

使用方法:var或对象名称类型?

这是一个问题,在编程时我总是想知道:在编写代码时要使用什么:

var myFiles = Directory.GetFiles(fullPath);
Run Code Online (Sandbox Code Playgroud)

要么

string[] myFiles = Directory.GetFiles(fullPath);
Run Code Online (Sandbox Code Playgroud)

VAR是新的,是一个隐式类型的局部变量,所以我们只能在本地使用,它具有类似的规则不能为空,等等,但我不知道如果我们使用它"正常"的任何优势.

"常"的部分说,不是在匿名类型,对象和集合初始化查询表达式,其中这是使用var匿名对象的意图,所以我的意思是......就像上面的例子.

你的想法是什么?

c# anonymous-objects .net-3.5 c#-3.0

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

是否有一种简单的方法来合并C#匿名对象

假设我有两个这样的匿名对象:

var objA = new { test = "test", blah = "blah" };
var objB = new { foo = "foo", bar = "bar" };
Run Code Online (Sandbox Code Playgroud)

我想将它们结合起来得到:

new { test = "test", blah = "blah", foo = "foo", bar = "bar" };
Run Code Online (Sandbox Code Playgroud)

我不知道在编译时objA和objB的属性是什么.我希望这就像jquery的extend方法.

有人知道可以帮我这样做的库或.net框架类吗?

c# anonymous-objects

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

通过C#中的Reflection创建匿名对象

有没有办法在.NET 3.5中运行时通过Reflection创建C#3.0匿名对象?我想在我的序列化方案中支持它们,所以我需要一种以编程方式操作它们的方法.

稍后编辑以澄清用例

一个额外的限制是我将在Silverlight应用程序中运行所有这些,因此额外的运行时不是一个选项,并且不确定如何生成代码即可运行.

c# reflection silverlight anonymous-objects

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

如何从TypeScript中的匿名对象轻松创建强类型对象?

我有一些JSON包含来自我的客户端的匿名对象.是否有一些内置机制或外部库用于将这些匿名对象转换为强类型的TypeScript对象?是否有像AutoMapper这样的东西?

我的对象是复杂类型,复杂类型作为属性.

javascript anonymous-objects strong-typing typescript

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

这是一个完全匿名的对象......如果是这样,你如何访问它?

可能重复:
带有src和内容的脚本标记是什么意思?

我刚看这个页面,关于如何实现Googles +1按钮.当一个实现(解析显式)显示此代码时:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
  {parsetags: 'explicit'}
</script>
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来像一个完全匿名的对象,但我可能会弄错.

如果是这样,怎么可能访问这个看似匿名的对象?在写完这个问题后,我突然意识到它可能是通过解析DOM完成的,但这看起来相当荒谬.

那么,这是一个匿名对象吗?如果是这样,这个匿名对象如何利用?这是我不知道的一些熟悉的技术吗?

或者我只是完全误解了代码,这不是一个匿名的对象吗?

javascript anonymous-objects

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

使用例如Moq和AutoFixture创建模拟和匿名对象的混合体?

我在工作期间遇到的课程如下:

public class MyObject
{
  public int? A {get; set;}
  public int? B {get; set;}
  public int? C {get; set;}
  public virtual int? GetSomeValue()
  {
    //simplified behavior:
    return A ?? B ?? C;
  }  
}
Run Code Online (Sandbox Code Playgroud)

问题是我有一些代码可以访问A,B和C并调用GetSomeValue()方法(现在,我认为这不是一个好的设计,但有时我的双手并列;-)).我想创建一个这个对象的模拟,同时将A,B和C设置为某些值.所以,当我使用moq时:

var m = new Mock<MyObject>() { DefaultValue = DefaultValue.Mock };
Run Code Online (Sandbox Code Playgroud)

让我在GetSomeValue()方法上设置一个结果,但所有属性都设置为null(使用Setup()设置所有属性非常麻烦,因为真实对象是一个讨厌的数据对象,并且具有比上面更多的属性简化的例子).

所以另一方面,使用像这样的AutoFixture:

var fixture = new Fixture();
var anyMyObject = fixture.CreateAnonymous<MyObject>();
Run Code Online (Sandbox Code Playgroud)

让我无法对GetSomeValue()方法进行调用.

有没有办法将两者结合起来,拥有匿名值和设置呼叫结果的能力?

编辑

根据nemesv的答案,我推导出以下实用方法(希望我做对了):

public static Mock<T> AnonymousMock<T>() where T : class
{
  var mock = new Mock<T>();
  fixture.Customize<T>(c => c.FromFactory(() => mock.Object)); …
Run Code Online (Sandbox Code Playgroud)

c# moq mocking anonymous-objects autofixture

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

匿名类型范围问题

创建一个变量的正确方法是什么,该变量将包含一段匿名对象,这些匿名对象是通过一段LINQ query时间生成的,将变量声明保持在a之外,try/catch并且赋值是在try/catch

目前我正在声明变量为IEnumberable<object>,但是当我稍后尝试使用它时,这会导致一些问题......

var variableDeclaration;
try{
    ...
    assignment
    ...
}catch...
Run Code Online (Sandbox Code Playgroud)

编辑:

如果它是相关的(不认为是),则作为JsonMVC3动作的结果返回对象列表.我正在尝试减少一些using语句在DB中打开的时间,因为我遇到了一些性能问题,我正试图清理一下.在进行一些测试时,我遇到了这个问题,似乎无法找到相关信息.

编辑2:

如果我可以请求避免关注LINQ.在使用LINQ时,问题更具体于与Anonymous对象相关的范围问题.不是使用LINQ(在这种情况下)生成它们的事实.

此外,一些答案提到了使用dynamic虽然这将编译它不允许我以后需要的方法的用法.如果我想要做的事情是不可能的,那么目前答案似乎是class用我需要的定义创建一个新的并使用它.

c# scope anonymous-objects

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

C#匿名对象作为参数不起作用

https://dotnetfiddle.net/446j0U链接以进行复制(在.net 4.7.2上失败,不在.net核心上)


public class TEST { 

   static public void Main(string[] args)
    {
        var test = new { Text = "test", Slab = "slab"};
        Console.WriteLine(test.Text); //outputs test
        Console.WriteLine(TEST.TestMethod(test));  //outputs slab
    }

    static public string TestMethod(dynamic obj)
    {
        return obj.Slab;
    }
} 
Run Code Online (Sandbox Code Playgroud)

在同一个函数中访问匿名对象工作正常,但是当我尝试在函数中传递它时,出现异常

运行时异常(第14行):尝试通过方法'DynamicClass.CallSite.Target(System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,System.Object)'访问类型'<> f__AnonymousType0`2'失败了

堆栈跟踪:

[System.TypeAccessException:尝试通过方法'DynamicClass.CallSite.Target(System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,System.Object)'访问类型'<> f__AnonymousType0`2'失败。]位于System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRet](CallSite网站,T0 arg0)的TEST.TestMethod(Object obj)处的CallSite.Target(Closure,CallSite,Object):TEST.Main(String [] args处的第14行):第9行


通过@RandRandom编辑:

由于悬赏期已近,我决定编辑此问题。

到目前为止,给定的答案都无法真正回答眼前的问题,只能给出避免错误的方法。

OP清楚地(在评论中)表示他知道解决方法,并且当前正在使用解决方法。

这些问题仍然存在

  1. 为什么在OP设置和dotnetfiddle.net上发生上述错误?
  2. 如果通过更新解决了错误,OP将需要更新什么?
  3. 在新的编译器/.Net版本/ Visual Studio版本中解决了该问题吗?

到目前为止,这里是OP的信息:

  • VS 2017
  • .Net Framework 4.8

.net c# dynamic anonymous-objects

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

临时ostream对象的c ++问题

我想改变这个工作代码:

ofstream outfile("my_file.txt");
copy(v.begin(), v.end(), ostream_iterator<int>(outfile));
Run Code Online (Sandbox Code Playgroud)

进入这个:

copy(v.begin(), v.end(), ostream_iterator<int>(ofstream("my_file.txt")));
Run Code Online (Sandbox Code Playgroud)

换句话说,我使用ofstream对象的"匿名"或未命名版本.

两个问题:

(1)为什么第二次尝试失败?

(2)第二次尝试在风格上是否很好,或者在C++中保持所有明确命名的更好?我来自Python背景,其中对象是一直在创建的.

谢谢!!

c++ anonymous-objects temporary-objects

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