小编Dyl*_*nSp的帖子

即使参数具有非空约束,也会收到有关可为空类型参数的错误

我有一个通用接口IDataAdapter<T>;接口的实现者应该能够Guid从数据源读取带有ID 的POCO 。IDataAdapter<T>有一个Read(Guid id)我想返回 a 的方法T?,其中 null 表示在数据源中找不到匹配项。然而,即使约束T : notnullIDataAdapter<T>,试图定义该方法给出了错误CS8627: A nullable type parameter must be known to be a value type or non-nullable reference type. Consider adding a 'class', 'struct', or type constraint.为什么我仍然收到此错误,甚至T限制到notnull

代码(应该在 C# 8 环境中<Nullable>enable</Nullable>):

interface IDataAdapter<T> where T : notnull
{
    T? Read (Guid id); // error CS8627
}
Run Code Online (Sandbox Code Playgroud)

c# nullable c#-8.0 nullable-reference-types

8
推荐指数
1
解决办法
2290
查看次数

如何让 Monaco 的 onDidChangeModelContent() 函数在每次击键时触发?

我试图捕捉摩纳哥编辑每次击键时内容的价值。我尝试过使用编辑器的功能,但是当使用以下代码在操场onDidChangeModelContent()上尝试时,这似乎不一致:

const editor = monaco.editor.create(document.getElementById("container"), {
    value: "function hello() {\n\talert('Hello world!');\n}",
    language: "javascript"
});

editor.onDidChangeModelContent = e => {
    console.log(editor.getValue());
};
Run Code Online (Sandbox Code Playgroud)

我仅在使用选项卡自动完成智能感知建议时看到控制台条目,而不是在每次击键时看到控制台条目。我是否应该使用另一个事件侦听器,或者我应该尝试其他一些技术?

monaco-editor

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

为什么我没有收到有关在C#8中使用结构的类成员可能会取消引用null的警告?

在启用了可空引用类型的C#8项目中,我有以下代码,我认为应该向我发出有关可能的空取消引用的警告,但不会:

public class ExampleClassMember
{
    public int Value { get; }
}

public struct ExampleStruct
{
    public ExampleClassMember Member { get; }
}

public class Program
{
    public static void Main(string[] args)
    {
        var instance = new ExampleStruct();
        Console.WriteLine(instance.Member.Value);  // expected warning here about possible null dereference
    }
}
Run Code Online (Sandbox Code Playgroud)

instance使用默认的构造函数初始化,instance.Member设置为默认值ExampleClassMember,这是null。这样,instance.Member.ValueNullReferenceException在运行时抛出一个。据我了解C#8的可空性检测,我应该收到关于这种可能性的编译器警告,但我没有。这是为什么?

c# nullable c#-8.0

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

是否有关于可折叠类型类的法律限制可折叠实例的派生方式?

我正在尝试使用FoldableHaskell 中的类型类,以以下数据类型为例:

data Tree a = Empty
            | Node (Tree a) a (Tree a)
Run Code Online (Sandbox Code Playgroud)

如果我使用DeriveFoldableGHC 扩展,它似乎Foldable沿着

instance Foldable Tree where
  foldMap _ Empty = mempty
  foldMap f (Node l n r) = (foldMap f l) <> (f n) <> (foldMap f r)
Run Code Online (Sandbox Code Playgroud)

即,树的中序遍历。但是,我没有看到任何明显的阻止不同Foldable实例的东西,例如预序遍历:

instance Foldable Tree where
  foldMap _ Empty = mempty
  foldMap f (Node l n r) = (f n) <> (foldMap f l) <> (foldMap f r)
Run Code Online (Sandbox Code Playgroud)

Foldable类型类是否存在使预序遍历实例不合法的法律?

haskell deriving foldable

6
推荐指数
3
解决办法
137
查看次数

为什么我不能在Haskell中重新定义:运算符?

我正在尝试重新实现Haskell中列表数据类型的一些功能以用于学习目的.当我尝试:使用此代码重新定义时:

{-# LANGUAGE NoImplicitPrelude #-}

data List a = Nil
            | Cons a (List a)

(:) :: a -> List a -> List a
(:) = Cons
Run Code Online (Sandbox Code Playgroud)

我收到以下错误stack runghc:

类型签名无效:(:) :: ...

应该是<variable> :: <type>形式

重新定义是不可能的:?这就是我收到这个错误的原因吗?

haskell operator-overloading

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

为什么 Go 函数不能返回带有约束类型参数的类型?

在解决 Go 中编译时强制执行有效状态转换的问题时,我遇到了函数无法返回具有非具体类型参数的泛型类型的限制,如本问题所述。无法构建的 MRE(Go Playground 链接):

\n
type MyStruct[T any] struct {\n    MyField T\n}\n\nfunc returnConstrainedGeneric[T any]() MyStruct[T] {\n    return MyStruct[int]{\n        MyField: 1,\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编译器返回错误cannot use MyStruct[int]{\xe2\x80\xa6} (value of type MyStruct[int]) as MyStruct[T] value in return statement

\n

链接的问题给出了这样的推理:

\n
\n

发生该错误的原因是涉及类型参数的操作(包括赋值和返回)必须对其类型集中的所有类型都有效。

\n
\n

它概述了包括类型断言在内的几种解决方法,但我很好奇为什么会出现此限制。MyStruct[int]天真地,在我的示例中,我希望从 中返回类型的值是有效的returnConstrainedGeneric(),因为int满足 的类型约束any。我希望 的调用者returnConstrainedGeneric()不知道返回值的类型是MyStruct[int],它只知道它MyStruct[T]满足T约束any。我的推理中缺少什么?这是 Go 如何实现泛型/类型约束的基本问题,还是 Go 编译器当前实现的问题,还是其他问题?

\n

generics go

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