小编dom*_*nic的帖子

如何使用tlbimp指定不同的File和Assembly版本?

我们使用tlbimp来生成互操作程序集.我们想用文件版本和汇编版本标记互操作程序集.但是,tlbimp上的/ asmversion选项似乎将这两个选项设置为相同的值.

有谁知道如何使用tlbimp在互操作程序集上设置不同的文件和程序集版本?

.net com-interop tlbimp

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

为什么Cast <double>()不能在IEnumerable <int>上工作?

可能重复:
Enumerable.Cast <T>扩展方法无法从int转换为long,为什么?
令人困惑的Enumerable.Cast InvalidCastException
将IEnumerable <T>转换/转换为IEnumerable <U>?

我正在尝试将整数数组转换为双精度数组(因此我可以将它传递给一个带有双精度数组的函数).

最明显的解决方案(对我来说,至少)是对IEnumerable使用Cast扩展函数,但是它给了我一个InvalidCastException,我不明白为什么.我的解决方法是使用Select,但我认为Cast看起来更整洁.

有人能告诉我为什么Cast方法不起作用?

希望下面的代码说明我的问题:

namespace ConsoleApplication1
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    class Program
    {
        static void Main()
        {
            var intArray = new[] { 1, 2, 3, 4 };
            PrintEnumerable(intArray, "intArray: ");

            var doubleArrayWorks = intArray.Select(x => (double)x).ToArray();
            PrintEnumerable(doubleArrayWorks, "doubleArrayWorks: ");

            // Why does this fail??
            var doubleArrayDoesntWork = intArray.Cast<double>().ToArray();
            PrintEnumerable(doubleArrayDoesntWork, "doubleArrayDoesntWork: ");

            // Pause
            Console.ReadLine();
        }

        private static void PrintEnumerable<T>(
            IEnumerable<T> toBePrinted, string msgPrefix)
        {
            Console.WriteLine(
                msgPrefix + string.Join(
                    ",", …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerable casting type-conversion

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

如何让LINQ返回集合中具有最大值的对象的索引?

我有一个不可变对象列表(在我的特定情况下是一个列表Tuple<double, double>),我想更改具有最高Item2值的那个.

理想情况下会有一个我可以使用的IndexOfMaxBy函数,所以我可以这样做:

var indexOfPointWithHighestItem2 = myList.IndexOfMaxBy(x => x.Item2);

var original = myList[indexOfPointWithHighestItem2];

myList[indexOfPointWithHighestItem2] = 
  new Tuple<double, double>(original.Item1, original.Item2 - 1);
Run Code Online (Sandbox Code Playgroud)

我已经看到如何让LINQ返回具有给定属性的最大值的对象?,并使用Jon Skeet的MaxBy功能与Select我可以做到:

var indexOfPointWithHighestItem2 = 
  myList.Select((x, i) => new { Index = i, Value = x })
        .MaxBy(x => x.Item2).Index;
Run Code Online (Sandbox Code Playgroud)

但是这会为我列表中的每个对象创建一个新对象,并且必须有一个更简洁的方法.有没有人有任何好的建议?

c# linq linq-to-objects

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