小编Pet*_*ček的帖子

通用嵌套类型中的typeof(T)

我不明白为什么以下行为完全按照它的方式行事.我甚至不知道它是由隐藏还是其他原因造成的.

class A<T>
{

    public class B : A<int>
    {
        public void b()
        {
            Console.WriteLine(typeof(T).ToString());
        }
        public class C : B
        {
            public void c()
            {
                Console.WriteLine(typeof(T).ToString());
            }
        }
        public class D : A<T>.B
        {
            public void d()
            {
                Console.WriteLine(typeof(T).ToString());
            }
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        A<string>.B.C c = new A<string>.B.C();
        A<string>.B.D d = new A<string>.B.D();
        c.c();
        c.b();
        d.d();
        d.b();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 为什么在c.c()生成时c.b()生成System.String System.Int32

  2. 为什么d.d()d.b() …

c# generics typeof type-parameter

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

如果从S到T存在身份转换,那么S和T必须是同一类型吗?

在6.1.6.在C#语言规范中,有:

隐式引用转换是:

(...)
从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为引用类型T0并且T0具有到T的标识转换.

他们为什么不相反,更简单地说:

从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为T.

有什么事实上的区别吗?

编辑:我意识到我错误地输入了规范,错误可能对问题很重要(规范说"隐式引用转换是"而不是"存在隐式转换")

c# language-specifications

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

可以在同一个函数中引用超出范围的局部变量吗?

在这段代码中,我引用了局部变量,b即使它超出了范围.但我是从同一个函数中做到的,所以它可能仍在堆栈中,对吧?我运行程序并且它工作但我想知道它是否可以保证在所有实现上工作.

#include <iostream>

void main()
{
    int* a;
    {
        int b = 5;
        a = &b;
    }
    std::cout << *a;
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers scope

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

Tampermonkey 用户脚本可以将数据保存到同步存储中吗?

我有 Google Chrome 的 Tampermonkey 的用户脚本。目前,它使用 HTML5 本地存储来保存其数据,但我希望这些数据在登录用户使用的所有计算机上同步。

GM_setValue功能仅将数据保存到本地磁盘,而该数据不会同步到其他计算机。

我不需要与 Firefox 兼容。

是否有可能做到这一点?

javascript google-chrome tampermonkey

5
推荐指数
0
解决办法
1792
查看次数

Java的ArrayList.stream().anyMatch()是否保证按顺序处理?

我有这个代码:

ArrayList<Detector> detectors;
detectors.stream().anyMatch(d -> d.detectRead(impendingInstruction, fieldName));
Run Code Online (Sandbox Code Playgroud)

但我还要保证:

  • 按顺序处理列表,从第一个元素到最后一个元素;
  • 元素返回后true,评估立即停止

这总是如此,或者如果不是,至少对于所有常见的JDK实现是否都是如此?

java java-stream

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

在 C# 中,我可以在编译类型中检查类是否可序列化吗?

我在 C# 中有一个 [Serializable] 类,它有很多字段,每个字段都有一个不同的类。我使用序列化来保存/加载此类的实例,但我经常忘记在某处添加 [Serializable] 属性,并且只在运行时学习它。可以在编译时检查吗?

例如,这段代码,

[Serializable]
class House {
 List<Room> Rooms;
}
class Room
{
}
Run Code Online (Sandbox Code Playgroud)

不应通过验证,因为 Room 类不可序列化。

.net c# serialization compile-time

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

为什么自闭脚本标记不会触发错误?

以下代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>A</title>
    <script type="text/javascript" src="./script.js" />
    <script type="text/javascript">alert("This is skipped.");</script>
</head>
<body>    
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

通过W3C的验证测试,Chrome在此页面上不显示任何Javascript错误.但是,整个文本<script type="text/javascript">alert("This is skipped.");不会被Javascript引擎解析,它只是查找</script>标记,即使它是自我关闭的.但是,加载了文件"script.js".

在Chrome,Firefox和IE 11中,这会导致同样的行为.

为什么是这样?这里到底发生了什么?

html javascript xhtml

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