编译器错误 CS0029:无法隐式转换为 uint

Compiler Error CS0029: Could not implicitly convert to uint

有很多关于 implicitly convert 的问题,但其中 none 为我提供了一些线索来解决这个问题。

所以要多谈谈我得到的这个问题。 我在我的项目中使用 VulkanSharp 绑定。我在编写渲染器代码时遇到了奇怪的异常情况,这让我感到震惊。

            uint _queueFamilyUsedIndex;

            var _deviceInfo = new DeviceCreateInfo
            {
                EnabledExtensionNames = new string[] { "VK_KHR_swapchain" },
                QueueCreateInfoCount = new DeviceQueueCreateInfo { QueueFamilyIndex = _queueFamilyUsedIndex }
            };

这部分代码让这个变得困难:

QueueCreateInfoCount = new DeviceQueueCreateInfo { QueueFamilyIndex = _queueFamilyUsedIndex }

我确实检查了这些变量需要什么类型,知道你做得很好很奇怪。

这些是 类:

public class DeviceCreateInfo : MarshalledObject
    {
        public DeviceCreateInfo();

        public uint Flags { get; set; }
        public uint QueueCreateInfoCount { get; set; }
        public DeviceQueueCreateInfo[] QueueCreateInfos { get; set; }
        public uint EnabledLayerCount { get; set; }
        public string[] EnabledLayerNames { get; set; }
        public uint EnabledExtensionCount { get; set; }
        public string[] EnabledExtensionNames { get; set; }
        public PhysicalDeviceFeatures EnabledFeatures { get; set; }

        public override void Dispose(bool disposing);
    }



public class DeviceQueueCreateInfo : MarshalledObject
    {
        public DeviceQueueCreateInfo();

        public uint Flags { get; set; }
        public uint QueueFamilyIndex { get; set; }
        public uint QueueCount { get; set; }
        public float[] QueuePriorities { get; set; }

        public override void Dispose(bool disposing);
    }

正如所见,这些类型是正确的。

这里的问题是您定义了数据类型 uint 的 field/property QueueCreateInfoCount,而在代码中您试图放置 DeviceQueueCreateInfo 类型的对象,这将不起作用显然 C# 是强类型语言。

我认为你的意图是这样写:

QueueCreateInfos = new DeviceQueueCreateInfo[] 
                   {
                     new DeviceQueueCreateInfo 
                    { 
                       QueueFamilyIndex = _queueFamilyUsedIndex 
                    }
                   }

根据我的理解,您需要使用另一个 属性 将其保存在数组集合中:

// it looks like you don't need this one there
public uint QueueCreateInfoCount { get; set; }
// but may be you need to use this one 
public DeviceQueueCreateInfo[] QueueCreateInfos { get; set; }