var 的类型(不使用动态)?

发布于 2025-01-01 12:02:29 字数 1192 浏览 1 评论 0原文

可能的重复:
如何将匿名类型传递给方法?< /a>

我试图识别匿名类型的类型。

List<int> lst = new List<int> {1, 2, 3, 4, 5};

var myVarType = from item in lst select new {P = item*item, P2 = item + "###"};

foreach (var k in myVarType)
        {
            Console.WriteLine(k.P + "     " + k.P2);
        }

在此处输入图像描述

现在我想要将部分代码转移到函数中,但它尖叫着他不知道类型- 这是合乎逻辑的,因为 var 在编译时是已知的,并且他不知道编译时的类型:

在此处输入图像描述

不想想使用动态||元组。

正如您所知, var 作为 func 参数类型是不可接受的。

但是,我曾经读到过有一个技巧可以让我将匿名类型转移到myFunc

我认为这是乔恩·斯基特或埃里克·利珀特的作品。

帮助 ?

编辑

看看我的自我回答。 我在这里找到的 匿名类的返回类型是什么

Possible Duplicate:
How can I pass an anonymous type to a method?

Im trying to recognize the type of the anonymous type.

List<int> lst = new List<int> {1, 2, 3, 4, 5};

var myVarType = from item in lst select new {P = item*item, P2 = item + "###"};

foreach (var k in myVarType)
        {
            Console.WriteLine(k.P + "     " + k.P2);
        }

enter image description here

Now i want a part of code to be transferred to a function but it screams that he doesnt know the type - which is logical since var is to be known at compile time and he doesnt know the type at compile :

enter image description here

I dont want to use dynamic || Tuples.

and as you know var is not acceptable as a func param type.

But , Ive once read that there is a trick which lets me transfer to myFunc the anonymous type .

I think it was by Jon skeet or Eric lippert.

Help ?

edit

look at my self answer.
I found it here
What's the return type of an anonymous class

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

颜漓半夏 2025-01-08 12:02:29

该类型是“生成的”,您可能能够在运行时通过反射获取它,但它将包含您不能在名称中使用的字符。

您可以使用元组:

 select new Tuple<int,string> ( item*item,  item + "###");

The type is 'generated' and you might be able to get it at run-time with reflection but it will contain characters you can't use in a name.

You could use Tuples:

 select new Tuple<int,string> ( item*item,  item + "###");
¢蛋碎的人ぎ生 2025-01-08 12:02:29

使方法通用,这应该可行。

static void MyFunc<T>(IEnumerable<T> myVarType) ...

编辑

正如评论中提到的,您无法访问属性。您可以在此处使用委托来访问属性或使用动态(您不想使用)。

static void MyFunc<T>(IEnumerable<T> myVarType, Func<T, Object[]> argumentCreator)
{
    Console.WriteLine("{0} {1}", argumentCreator(myVarType));
}

Make the method generic, this should work.

static void MyFunc<T>(IEnumerable<T> myVarType) ...

Edit

As mentioned in comments you can't access the properties. You could use here a delegate to access the properties or use dynamic ( which you don't want to use ).

static void MyFunc<T>(IEnumerable<T> myVarType, Func<T, Object[]> argumentCreator)
{
    Console.WriteLine("{0} {1}", argumentCreator(myVarType));
}
十雾 2025-01-08 12:02:29

这是我找到的代码

的返回类型是什么匿名类

static T CastByExample<T>(object source, T example) where T : class
{
    return source as T;
}

static object ReturnsAnonymous() { return new { X = 123 }; }

static void DoIt()
{
    object obj = ReturnsAnonymous();
    var example = new { X = 0 };
    var anon = CastByExample(obj, example);
    Console.WriteLine(anon.X); // 123
}

here is the code which i found

What's the return type of an anonymous class

static T CastByExample<T>(object source, T example) where T : class
{
    return source as T;
}

static object ReturnsAnonymous() { return new { X = 123 }; }

static void DoIt()
{
    object obj = ReturnsAnonymous();
    var example = new { X = 0 };
    var anon = CastByExample(obj, example);
    Console.WriteLine(anon.X); // 123
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文