小编dev*_*xer的帖子

什么是MvcHtmlString,我应该何时使用它?

文件对于MvcHtmlString是不是非常有启发性:

表示不应再次编码的HTML编码字符串.

我不清楚这究竟是什么意思.似乎有些HTML帮助器方法会返回一个MvcHtmlString,但我在网上看到的几个自定义帮助程序的例子只返回一个常规字符串.

问题:

什么是MvcHtmlString

我什么时候应该选择MvcHtmlString超过string反之亦然?为什么?

c# asp.net-mvc

216
推荐指数
4
解决办法
10万
查看次数

Generic.xaml有什么特别之处?

我一直在试图弄清楚如何组织我的ResourceDictionary文件以便重用并与我团队的其他成员共享.

我一直遇到"Generic.xaml",但如果我在MSDN上查看Generic.xaml或者只是进行谷歌搜索,我似乎只会发现博客文章和论坛问题 - 我似乎无法打击任何真正权威和清晰的东西.

Generic.xaml和MyRandomlyNamedResourceDictionary.xaml有什么区别?看起来无论哪种方式,我都必须使用Source属性引用存储在库中的ResourceDictionaries.例如,:

<Application.Resources>
    <ResourceDictionary
        Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

那么Generic.xaml有什么优势呢?如果我不试图给我的应用程序多个"外观"(即,如果我只有一个主题),它是否有任何目的?

wpf xaml themes

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

我应该如何命名将两个表一起映射的表?

假设我有两张桌子:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList
Run Code Online (Sandbox Code Playgroud)

我该怎么称呼将颜色映射到形状的表格?

Table: ???
Columns: ColorId, ShapeId
Run Code Online (Sandbox Code Playgroud)

sql database database-design data-modeling naming-conventions

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

算法中不熟悉的符号:∀是什么意思?

我正在阅读一个算法(它是一个基于A*的路径寻找算法),它包含一个我不熟悉的数学符号:∀

以下是上下文:

v(s)≥g(s)= mins'∈pred(s)(v(s')+ c(s',s))∀s≠s start

有人可以解释meaning的含义吗?

algorithm math symbols

82
推荐指数
4
解决办法
25万
查看次数

为什么不能将null用作Dictionary <bool?,string>的键?

显然,null即使您的密钥是可空类型,也不能使用密钥.

这段代码:

var nullableBoolLabels = new System.Collections.Generic.Dictionary<bool?, string>
{
    { true, "Yes" },
    { false, "No" },
    { null, "(n/a)" }
};
Run Code Online (Sandbox Code Playgroud)

...导致此异常:

值不能为空.参数名称:key

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

[ArgumentNullException: Value cannot be null. Parameter name: key] System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) +44 System.Collections.Generic.Dictionary'2.Insert(TKey key, TValue value, Boolean add) +40
System.Collections.Generic.Dictionary'2.Add(TKey key, TValue value) +13

为什么.NET框架允许键的可空类型,但不允许空值?

.net c# dictionary hashtable

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

我应该停止对抗Visual Studio的默认命名空间命名约定吗?

我正在开发一个MVVM项目,所以我的项目中有像Models,ViewModels,Windows等文件夹.每当我创建一个新类时,Visual Studio会自动将文件夹名称添加到命名空间名称而不是仅保留项目 - 级别命名空间 因此,向ViewModels文件夹添加一个新类将导致命名空间,MyProject.ViewModels而不仅仅是MyProject.

当我第一次遇到这个时,它让我恼火.我的类名很清楚,有时甚至包含其中的文件夹名称(例如ContactViewModel).我很快发现自己手动删除名称空间上的文件夹名称.我甚至试图创建一个自定义类模板(请参阅此问题),但我无法使其工作,因此继续手动执行.

不过,我开始怀疑,如果这个惯例存在的原因是我没有看到的.如果你出于某种原因将许多相同的类名组织成文件夹,我可以看到它很有用,但这似乎不是特别常见的情况.

问题:

  • 为什么命名空间名称的常见约定反映文件夹结构?
  • 你遵守这个惯例吗?为什么?

c# namespaces naming-conventions visual-studio

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

为什么我不能这样做:dynamic x = new ExpandoObject {Foo = 12,Bar ="12"}}

我做错了什么,或者以下代码真的不可能?

dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" };
Run Code Online (Sandbox Code Playgroud)

如果这确实不可能,是否有另一种单行方式来实例化具有两个属性的ExpandoObject?

为什么C#团队会选择禁止使用与常规对象,匿名对象和枚举/列表相同的初始化语法?

更新

我问过这个问题是因为我试图向珍珠爱好者展示C#的酷炫新动态特性,但后来由于无法做到我认为是一个逻辑实例化的东西而陷入困境ExpandoObject.感谢Hans Passant的回答,我意识到这ExpandoObject是错误的工具.我的真正目标是使用C#的动态功能从方法返回两个命名值.汉斯指出,dynamic关键字对此非常完美.我没有需要一个ExpandoObject完成它的所有开销.

因此,如果您想从方法中返回一对命名值,并且您不关心类型安全性,智能感知,重构或性能,这可以很好地工作:

public dynamic CreateFooBar()
{
    return new { Foo = 42, Bar = "Hello" };
}
Run Code Online (Sandbox Code Playgroud)

用法:

dynamic fooBar = CreateFooBar();
var foo = fooBar.Foo;
var bar = fooBar.Bar;
Run Code Online (Sandbox Code Playgroud)

c# dynamic expandoobject

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

ASP.NET MVC中每个请求一个DbContext(没有IOC容器)

如果这已经得到回答,请道歉,但如果您不使用IOC容器,如何保证每个请求有一个Entity Framework DbContext?(到目前为止,我遇到的答案涉及IOC容器解决方案.)

似乎大多数解决方案都挂钩到HttpContext.Current.Items字典中,但是如何在请求完成时保证处理DbContext?(或者EF的处理不是绝对必要的DbContext吗?)

编辑

我目前正在我的控制器中实例化和处理我的DbContext,但我在ActionFilters和我的MembershipProvider中也有几个单独的DbContext实例(我刚注意到,也有几个验证器).因此,我认为集中我的DbContext的实例化和存储以减少开销可能是个好主意.

asp.net-mvc entity-framework ef-code-first entity-framework-4.1 asp.net-mvc-3

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

'CompanyName.Foo'是'命名空间',但用作'类型'

重述问题

我正在复活这个问题,因为我今天刚刚再次遇到这个错误,我仍然完全混淆为什么C#编译器无法检查命名空间和类型中的类型之间的冲突,因为命名空间不存在.

如果我有...

public Foo MyFoo { get; set; }
Run Code Online (Sandbox Code Playgroud)

...为什么编译器会关心Foo命名空间和类型?您可以将属性声明为命名空间而不是类型吗?

"名称空间使用类似"编译器错误背后的逻辑是什么?这有什么问题可以拯救我?

[我如何标记Eric Lippert?:)]


原始问题


问题

我有一个带有默认命名空间的项目"Foo" CompanyName.Foo.我有一个名为"Foo"的数据库.

当我在数据库上运行SqlMetal.exe时,它会生成一个类CompanyName.Foo.Models.Foo.

然后,当我尝试使用此类作为类型创建属性时,像这样......

using CompanyName.Foo.Models;
...
public Foo DataContext { get; set; }
Run Code Online (Sandbox Code Playgroud)

......我收到错误:

'CompanyName.Foo'是'命名空间',但用作'类型'.

我被迫做...

public CompanyName.Foo.Models.Foo Foo { get; set; } // :-(
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么会出现此错误?我的财产声明不包含CompanyName,为什么这是一个问题?简单地说:Foo != CompanyName.Foo.另外,为了确保,我搜索了我的整个解决方案,namespace Foo并提出了零命中(如果我实际使用了命名空间Foo,我可以理解得到错误).

  2. [回答]Foo每次我想使用它时,有没有办法完全符合条件?

  3. [回答]有没有办法让SqlMetal将类命名为Foo(不用更改我的数据库名称)?我可以使用开关更改命名空间,但我不知道如何更改实际的类名.

更新

仍在寻求(1)的答案.

OKW钉(2)和(3).

Usings

我的所有using陈述都提出了要求:

using System;
using System.ComponentModel;
using System.Data.Linq; …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction code-generation namespaces linq-to-sql

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

无法引用包含合并字典的资源字典

我有一个库,CommonLibraryWpfThemes,里面有几个Resource Dictionary XAML文件.My Themes/Generic.xml文件包含一个ResourceDictionary.MergedDictionaries声明,它将所有其他文件合并在一起.

Generic.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/BrushDictionary.xaml" />
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/TextBlockDictionary.xaml" />
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/LabelDictionary.xaml" />
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/ButtonDictionary.xaml" />
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序项目中,我引用了CommonLibraryWpfThemes,并在我的App.xaml文件中显式引用了Generic.xml.

App.xaml - 失败

<Application
    x:Class="MyApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
        <ResourceDictionary
            Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml" />
    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

这不起作用.运行我的应用程序时出现以下错误:

System.Windows.Markup.XamlParseException occurred
  Message="Cannot find resource named '{_fadedOrangeBrush}'. Resource names are case sensitive.  Error at object 'System.Windows.Setter' in markup file 'CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml' Line 18 Position 13."
  Source="PresentationFramework"
  LineNumber=18
  LinePosition=13
Run Code Online (Sandbox Code Playgroud)

如果我直接将Generic.xaml的内容放入App.xaml,一切正常:

App.xaml - SUCCEEDS

<Application
    x:Class="MyApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary …
Run Code Online (Sandbox Code Playgroud)

wpf xaml themes resourcedictionary

44
推荐指数
3
解决办法
4万
查看次数