小编Car*_*oco的帖子

为什么没有隐含的类型?

我想我明白为什么这个小C#控制台应用程序不会编译:

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void WriteFullName(Type t)
        {
            Console.WriteLine(t.FullName);
        }

        static void Main(string[] args)
        {
            WriteFullName(System.Text.Encoding);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器引发CS0119错误:'Encoding' is a type which is not valid in the given context.我知道我可以通过使用typeof()运算符从其名称生成一个Type对象:

        ...
        static void Main(string[] args)
        {
            WriteFullName(typeof(System.Text.Encoding));
        }
        ...
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.

但对我来说,这种使用typeof()似乎总是多余的.如果编译器知道某个令牌是对给定类型的引用(如CS0119建议的那样)并且它知道某个赋值的目的地(无论是函数参数,变量还是其他)需要引用给定类型,为什么编译器不能将其作为隐式typeof()调用吗?

或者编译器完全有能力采取这一步骤,但是由于可能产生的问题而被选中.这会导致我现在无法想到的任何歧义/易读性问题吗?

c#

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

屏幕阅读器如何处理显示屏?

我正在编写一个HTML表单,其中某些字段的必要性取决于其他字段的值,因此会动态更改.我想通过在每个必填字段前面的标签上添加星号来呈现该必要性的视觉提示.由于它是纯粹的可视化,并且required相应标签中的属性很好地表达了情境的语义,我希望将星号作为CSS定义中的内容添加,而不是直接或通过脚本将其插入HTML中.

然而,将视觉内容添加到所需字段之前的元素是具有挑战性的,因为CSS选择器组合器似乎向前(朝向儿童和兄弟姐妹)但不向后(朝向父母或以前的兄弟姐妹).

我当然可以在相同的代码中切换标签中的类名,我更改了输入字段的必要性,但这会将内容添加与必要性更改分成两个不同的指令,我必须记住它们一起调用,现在和一年后,这是一个我想避免的约束; 我更愿意切换输入字段的必要性,并让CSS对此更改作出反应而不需要我进一步参与.

所以我使用了反转每个标签及其输入字段的顺序,然后将它们包装在一个display:flex; flex-direction:column-reverse元素中,使标签文本在其相应的字段之前呈现,尽管在它之后被声明.这样,我可以使用next-sibling combinator在每个必填字段的标签文本中添加星号:

label {
  display:inline-flex;
  flex-direction:column-reverse;
}

label>input[required]+span:after
{
  content:"*";
  color:#a21;
}
Run Code Online (Sandbox Code Playgroud)
<label>
  <input type="text" required>
  <span>Field 1</span>
</label>
<label>
  <input type="text">
  <span>Field 2</span>
</label>
Run Code Online (Sandbox Code Playgroud)

然而,我的问题是屏幕阅读器将如何解释双重反转(一次在HTML中,一次在CSS中).他们会在期待用户输入之前读出文本吗?

谢谢,我总是需要坐下来,安装一个屏幕阅读器并自己找出这些东西,但我似乎没有时间去做:-(

html css screen-readers flexbox

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

IntelliSense可以使重音不敏感吗?

我写保持在西班牙语一块旧的C#代码,原来在VS2008,含酌情根据西班牙语言的语法规则,重音字母的名字.

关于编译和执行一切都很好,但我注意到,在VS2008中,intellisense有点不强烈; 如果我有一个名为Índice并且输入无重音i 的属性,它仍会建议我的目标.在VS2017中情况并非如此,其中重音字母似乎被认为与没有重音的相同字母完全不同.

这种行为是可配置的吗?段Text editor > C# > IntelliSense的设置窗口似乎并没有包含任何相关参数,而我已出口我的设置保存到文件,并检查了生成的XML,我无法找到任何配置参数名称中包含字符串"雅绅特"或"SENSIT".

c# intellisense visual-studio-2008 visual-studio-2017

7
推荐指数
0
解决办法
88
查看次数

Thread.Sleep(Timeout.Infinite)的用例是什么?

我碰巧关注传递给参数的intellisense工具提示System.Threading.Thread.Sleep(int millisecondsTimeout),说"(...)指定System.Threading.Timeout.Infinite以无限期地阻塞线程 ".我很好奇.

我可以理解为什么一个可能在无限循环中包含短的非活动延迟,因此当需要在休眠线程中没有立即动作时产生对其他执行线程的处理能力,尽管我通常更喜欢用EventWaitHandlers 实现这样的延迟以便我可以避免等待如果我发信号通知线程从另一个线程正常结束执行,则会出现完全休眠延迟.

但我无法确定何时可能需要无限期地挂起一个线程,并且在某种程度上,据我所知,只能通过一个相当不合适Thread.Abort()/ ThreadAbortException对来中断.

那么我可能想要无限期挂起线程的工作场景是什么?

c# multithreading

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