小编Tom*_*ter的帖子

VS 2015 IntelliSense:程序集未引用错误

我刚刚切换到VS 2015.我有一个较旧的MVC 5应用程序,运行4.52.在VS 2013中,它非常好.

在VS 2015中,我的红色波浪形在我的下面,@Html.TextBoxFor()有一个错误表明:

"Expression <>"类型在未引用的程序集中定义.您必须添加对程序集'System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

该项目构建和运行正常 - 但我担心VS 2013中从未发生的IntelliSense错误.好的,所以我尝试按照上面的错误中的建议添加对System.Core的引用,然后我收到此错误:

无法添加对"System.Core"的引用.构建系统已自动引用此组件.

再次,这在VS 2013中很好.

intellisense visual-studio-2015

36
推荐指数
2
解决办法
2万
查看次数

C#7编译器错误 - 模式匹配

由于某种原因,M1()导致编译器错误,而M2()同样的事情导致没有错误.知道为什么吗?

使用false ==应与使用not运算符相同!.

使用未分配的局部变量'i'

class Program {
    static void Main(string[] args) {
        int x = 8;

        M1(x);
        M2(x);
    }  // Main()

    public static void M1(Object obj) {
        if (false == (obj is int i))  // Causes ERROR on WriteLine
            return;

        System.Console.WriteLine(i); // Use of unassigned local variable 'i'
    }

    public static void M2(Object obj) {
        if (!(obj is int i))  // OKAY
            return;

        System.Console.WriteLine(i);
    }
} // class Program
Run Code Online (Sandbox Code Playgroud)

c# c#-7.0

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

我可以从CDN获取Bootstrap Glyphicons吗?

我是BS的新手.我正在从MaxCDN检索Bootstrap CSS和JS文件的v3.3.6.我希望有一种方法可以包括glyphicons但我看不出怎么做.是否可以从CDN中检索glyphicons?

另外,我不明白Bootstrap下载页面在引用"预编译引导程序"时的含义为什么我需要预编译下载与MaxCDN下载.我看到预编译提供了glyphicons所以也许这是唯一的原因.

cdn twitter-bootstrap glyphicons

14
推荐指数
2
解决办法
4万
查看次数

Nullable不是ValueType

如果查看.NET Nullable的文档,您将看到:

   struct Nullable<T>
Run Code Online (Sandbox Code Playgroud)

请注意,它是一个结构,而不是一个类.

这似乎是一个struct Nullable<T>不是一个值类型,这是非常意外的.以下代码打印False:

   Type nullableType = typeof(Nullable<int>);
   Console.WriteLine(nullableType is ValueType);
Run Code Online (Sandbox Code Playgroud)

如果查看生成的IL,您将看到该编译器nullableType在编译时确定为ValueType.但如果它是一个结构,它怎么可能是ValueType?所有结构都是ValueTypes,对吗?显然,它与泛型有关.

我在这里错过了什么?语言规范中是否有关于此的内容?

谢谢.

c# nullable

8
推荐指数
2
解决办法
269
查看次数

带有(和不带)混合静态构造函数的C#静态初始化程序

我已经阅读了C#语言规范(v5.0)的相关部分,但我找不到与我所看到的相关的部分.

如果您运行下面的代码,您将看到下面的输出,这是我所期望的:

using System;

class Test {
   static int count = 0;
   static void Main() {
      Console.WriteLine("In Main(), A.X=" + A.X);
   }

   public static int F(string message) {
      Console.WriteLine(message);
      A.X = ++count;

      Console.WriteLine("\tA.X has been set to " + A.X);
      B.Y = ++count;

      Console.WriteLine("\tB.Y has been set to " + B.Y);
      return 999;
   }
}
class A {
   static A() { }
   public static int U = Test.F("Init A.U");
   public static int X = Test.F("Init A.X");
}

class B { …
Run Code Online (Sandbox Code Playgroud)

c# static static-initializer

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

全球职能中的"这个"

我的印象是"this"关键字代表范围内的当前所有者.显然,这是错误的.让我来看看代码:

alert(this);     // alerts as [object Window] -- Okay

function p1() {
    alert(this);
}

var p2 = function() {
    alert(this);
}

p1();           // alerts as undefined  -- ???
p2();           // alerts as undefined  -- ??
window.p1();    // alerts as [object Window] -- Okay
window.p2();    // alerts as [object Window] -- Okay
Run Code Online (Sandbox Code Playgroud)

上面的代码首先警告[对象窗口],正如我所料,但接下来的两次调用p1()和p2()警告"this"为"undefined".最后两次调用p1()和p2()将"this"警告为[object window].

是不是p1()和p2()存在于全局(即窗口)范围内?我认为调用window.p1()与调用p1()同义,就像调用alert()与window.alert()同义一样.

对于我的(C#)思维方式,p1()和p2()属于全局范围.这些函数是全局窗口对象的成员,因此当它们引用"this"时,它们应该引用[object Window].显然,我在这里非常错.

javascript this

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

CSS 邻接选择器

CSS 似乎是右关联的,与编程语言不同,你不能用括号影响它。

我有这样的一般结构:

<div>
   <div class='pizza'></div>
</div>
<p>Select me!  Select me!</p>

<div>
   <div class="pizza">
      <p>Do NOT select me!</p>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我无法找出包含 a 的<p>兄弟姐妹之后的a 选择器。<div><div class="pizza">

我尝试了这个,但是 CSS 从右到左的关联性并没有产生我想要的结果:

div > div.pizza + p
Run Code Online (Sandbox Code Playgroud)

我知道这是不对的。

有人可以指点一下吗?

css css-selectors

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

CLR如何在数组上实现IEnumerable <T>?

我意识到数组实现IEnumerable<T>"在运行时".根据数据的MSDN文档:

从.NET Framework 2.0开始,Array类实现System.Collections.Generic.IList<T>,System.Collections.Generic.ICollection<T>以及System.Collections.Generic.IEnumerable<T>通用接口.这些实现在运行时提供给数组,因此,泛型接口不会出现在Array类的声明语法中.

当然,这是正确的.在查看源代码时,Array您会看到它仅实现了非泛型版本IEnumerable.

如果运行下面的代码片段,您将看到泛型Enumerator的类型System.SZArrayHelper+SZGenericArrayEnumerator`1[System.String].

String[] array = new[] { "Apple", "Banana", "Grape" };
IEnumerator enumer = ((IEnumerable<String>)array).GetEnumerator();

// Next line writes: System.SZArrayHelper+SZGenericArrayEnumerator`1[System.String]
Console.WriteLine(enumer.GetType());
Run Code Online (Sandbox Code Playgroud)

我希望有人能够提供一些关于 CLR 如何IEnumerable<T>在运行时实现的见解?实现这一目标的机制是什么?在CLR中是硬编码的还是Array类中有什么东西可以通知CLR动态实现泛型版本?

作为后续工作,我正在阅读"Nutshell中的C#5,0"和第274页,作者声称Array该类必须实现非IEnumerable向后版本的"向后兼容性".有人可以举例说明这种"向后兼容性"的必要性吗?

c# arrays ienumerable

6
推荐指数
0
解决办法
126
查看次数

在Visual Studio 2015中创建一个空的MVC项目

我正在使用VS 2015 Enterprise,我正在尝试创建一个空的MVC项目.

我右键单击解决方案进入"添加|新建项目..."对话框.然后,我从左侧列表中选择"Web",然后选择"ASP.NET Web Application",如下所示:

在此输入图像描述

接下来,将打开以下对话框窗口, "Web窗体","MVC"和"Web API"的复选框均已禁用.有谁知道为什么他们被禁用以及如何启用它们?选择"Web API"或"Web应用程序"(而不是"空")不会更改复选框的状态 - 它们将保持禁用状态.

如果我没记错的话,我曾经能够在VS 2013中创建一个空的MVC项目,没有任何问题.

在此输入图像描述

asp.net-mvc visual-studio-2015

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

嵌套GroupBy LINQ使用Fluent语法

我试图使用流利(即"方法")语法编写嵌套的GroupBy LINQ表达式.

这是我的课程和数据:

class Person
{
    public String ZipCode, Gender, Name;
}

private static List<Person> people = new List<Person>
{
    new Person { ZipCode= "11111", Gender = "M", Name = "Tom" },
    new Person { ZipCode= "11111", Gender = "M", Name = "Bob" },
    new Person { ZipCode= "11111", Gender = "F", Name = "Nancy" },
    new Person { ZipCode= "11111", Gender = "F", Name = "Lisa" },
    new Person { ZipCode= "22222", Gender = "M", Name = "Dan" }, …
Run Code Online (Sandbox Code Playgroud)

linq group-by

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

HTML页脚由ScrollBar隐藏

我试图在我的页面上创建一个页脚,当用户向上和向下滚动时,它停留在页面底部.我大部分时间都在那里但是我在下面描述了一些问题.

我有一个JSFiddle:https://jsfiddle.net/ay2y73co/

这是我用于我的页脚的代码:

<!-- This fake paragraph only exists to put some space above the footer
     so that page content is not hidden by the footer. -->
<p style="height:3.5em;margin:0px;">&nbsp;</p>

<!-- Here is the footer, proper. -->
<div style="position:fixed;bottom: 0px;left:0px;padding:0.5em; height:3.0em;background-color:rgb(200,200,200);margin: 0px;width:100%;font-size:75%;border: 2px inset red">
   <p>I want the right border to show up -- it seems it is clipped by the scrollbar.</p>
</div>
Run Code Online (Sandbox Code Playgroud)

第一个问题是我的页脚的右边框被滚动条遮挡,基本上,它位于滚动条的后面,正如您可以从缺少的右边框看到的那样.

第二个问题本身并不是一个问题,但我不喜欢这样一个事实,即我必须在页脚上方添加一个"假段落",以防止页面内容在页脚后面滚动.它不像一个干净的解决方案.

html css fixed footer

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

一个不应该运行的静态初始化程序

之前我在同一代码的Debug和Release版本之间发布了一个关于静态初始化器和不同输出的问题.我确定Release版本从Debug构建产生了不同的输出(实际上它没有产生输出),因为一个DebuggableAttribute设置允许JIT优化器消除Release版本中的输出.

我想的越多,它就越困扰我.在我进一步讨论之前,让我展示我原始发布的代码和Debug构建中产生的输出:

 using System;

 class Test {
    static int value = 0;
    static int a = Initialize("Assigning a");
    static int b = Initialize("Assigning b");
    static String name = "Fred";
    static int c = Initialize("Assigning c");

    static int Initialize(String mssg) {
       ++value;
       Console.WriteLine("In Initialize() :: {0}, name={1}, returning {2}", mssg, name, value);
       return value;
    } // Initialize()

    static void Main() {
    }// Main()
 } // class Test
Run Code Online (Sandbox Code Playgroud)

此代码的输出(当使用Debug构建运行时)是这样的:

In Initialize() :: Assigning a, …
Run Code Online (Sandbox Code Playgroud)

c# static initializer

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

为什么不编译?

我有这个代码:

static List<string> lst = new List<string>();

public static Task<IEnumerable<String>> GetStrings() {
    IEnumerable<String> x = lst;
    
    // This line below compiles just fine.
    // return Task.Run(() => x);
    
    // This line gives a compiler error:
    // Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>' to
    // 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<string>>'
    return Task.Run(() => lst);
}    
Run Code Online (Sandbox Code Playgroud)

为什么这一行编译得很好:return Task.Run(() => x); 虽然return Task.Run(() => lst);给出了编译器错误:

无法将类型“System.Threading.Tasks.Task<System.Collections.Generic.List>”隐式转换为“System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable>”

我认为既然List<string>IEnumerable<string>,我不应该显式设置x. 我的意思是,编译器知道lst是一个IEnumerable<string>.

我想我一定在这里遗漏了一些基本的东西。

c#

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