我需要创建一个保存同步数据的TreeView,比如DataGrid.
为了澄清,请看一下这张图片:

所以,我在左侧有一个TreeView,右侧有列.
数据将来自这样的对象:
public NodeData Parent;
public List<NodeData> Children;
public String Label;
public Boolean DataA;
public Boolean DataB;
public Boolean DataC;
public Boolean DataX;
public Boolean DataY;
public Boolean DataZ;
Run Code Online (Sandbox Code Playgroud)
我该如何创建呢?
冰雹,堆叠!
我需要选择按范围分组的值的计数.
举例来说,假设我在表columm中有以下值: 1,2,4,5,6,8,9,11,13,16
然后,我想在5的范围内撤回它们的计数,如下所示:
From  0 to  4 there is 3 values (1,2,4)
From  5 to  9 there is 4 values (5,6,8,9)
From 10 to 14 there is 2 values (11,13)
From 15 to 19 there is 1 values (16)
Run Code Online (Sandbox Code Playgroud)
等等...
如何在查询中进行此操作?
我正在尝试在Mongoose中创建一个具有映射(对象,关联数组,键值对)的模式,但到目前为止还没有成功.
我的架构的文档必须是这样的:
{
    "_id": ObjectId("..."),
    "groups"
    {
        "groupA":
        {
            "value1": "...",
            "value2": "..."
        },
        "groupB":
        {
            "value3": "...",
        },
        "groupC":
        {
            "value4": "...",
            "value5": "...",
        },
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
groups是具有可变数量的键的对象.我不提前知道这些密钥,因为它将由用户创建.
组中的每个条目都是另一个对象.和以前一样,我不知道密钥标识符,但我知道值是String(或布尔值,或者数字,无关紧要).
当然,这些键是字符串.
在Mongoose中甚至可能(无论如何构建这样的模式/模型)?
我知道我可以(隐式地)将a转换int为a float或floata double.
此外,我可以(显式)转换double为a float或a int.
这可以通过以下示例证明:
int i;
float f;
// The smaller type fits into the bigger one
f = i;
// And the bigger type can be cut (losing precision) into a smaller
i = (int)f;
Run Code Online (Sandbox Code Playgroud)
问题是这些类型不是从另一个继承的(int不是子类型,float反之亦然).
他们已经实现了隐式/显式转换运算符或类似的东西.如果没有,它的工作原理就像......
我的问题是:如何检查A类型的变量是否可以转换为B类型.
我试过i.GetType().IsAssignableFrom(f.GetType()),但Type.IsAssignableFrom(Type)只检查继承和接口(可能还有更多),但不检查已实现的转换操作符.
我试过i is float和f is int,但效果是一样的.
好吧,我将开始我的问题,说我理解可变结构背后的邪恶,但我正在使用SFML.net并使用大量的Vector2f和这样的结构.
我不明白为什么我可以拥有,并且更改类中的字段的值,并且在同一个类中不能对属性执行相同的操作.
看看这段代码:
using System;
namespace Test
{
    public struct TestStruct
    {
        public string Value;
    }
    class Program
    {
        TestStruct structA;
        TestStruct structB { get; set; }
        static void Main(string[] args)
        {
            Program program = new Program();
            // This Works
            program.structA.Value = "Test A";
            // This fails with the following error:
            // Cannot modify the return value of 'Test.Program.structB'
            // because it is not a variable
            //program.structB.Value = "Test B"; 
            TestStruct copy = program.structB;
            copy.Value = "Test B";
            Console.WriteLine(program.structA.Value); // …Run Code Online (Sandbox Code Playgroud)