小编Lau*_*oun的帖子

反映参数名称:滥用C#lambda表达式还是语法亮度?

我正在看MvcContrib网格组件,我很着迷,但同时被网格语法中使用的语法技巧击退:

.Attributes(style => "width:100%")
Run Code Online (Sandbox Code Playgroud)

上面的语法将生成的HTML的style属性设置为width:100%.现在如果你注意,"风格"没有指定,是从表达式中参数的名称推断出来的!我不得不深入研究这个并发现"神奇"发生的地方:

Hash(params Func<object, TValue>[] hash)
{
    foreach (var func in hash)
    {
        Add(func.Method.GetParameters()[0].Name, func(null));
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上,代码使用正式的编译时,参数名来创建属性名称 - 值对的字典.结果语法结构确实非常具有表现力,但同时也非常危险.lambda表达式的一般用法允许替换使用的名称而没有副作用.我在一本书中看到一个例子,说collection.ForEach(book => Fire.Burn(book))我知道我可以用我的代码编写collection.ForEach(log => Fire.Burn(log)),这意味着同样的事情.但是使用MvcContrib网格语法突然间,我发现代码主动查找并根据我为变量选择的名称进行分解!

这是C#3.5/4.0社区和lambda表达爱好者的常见做法吗?或者是一个我不应该担心的流氓一招特立独行?

c# asp.net-mvc lambda mvccontrib

425
推荐指数
18
解决办法
3万
查看次数

获取没有扩展名的文件名

获取某个文件夹中的文件名时:

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
    builder.Append(fi.Name);
    builder.Append(", ");
    ...
}
Run Code Online (Sandbox Code Playgroud)

fi.Name让我与它的扩展名的文件名:file1.txt,file2.txt,file3.txt.

如何在没有扩展名的情况下获取文件名?(file1,file2,file3)

.net c#

262
推荐指数
8
解决办法
24万
查看次数

我想删除所有bin和obj文件夹以强制所有项目重建所有内容

我使用多个项目,我希望递归删除名为'bin'或'obj'的所有文件夹,这样我确信所有项目都会重建所有内容(有时这是强制Visual Studio忘记以前的唯一方法)编译).

有没有快速的方法来完成这个(例如.bat文件)而不必编写.NET程序?

cmd batch-file visual-studio-2008 visual-studio

234
推荐指数
12
解决办法
11万
查看次数

如何在C#中编写JSON文件?

我需要在C#中使用JSON格式将以下数据写入文本文件.括号对于它是有效的JSON格式很重要.

[
  {
    "Id": 1,
    "SSN": 123,
    "Message": "whatever"

  },
  {
   "Id": 2,
    "SSN": 125,
    "Message": "whatever"
  }
]
Run Code Online (Sandbox Code Playgroud)

这是我的模型类:

public class data
{
    public int Id { get; set; }
    public int SSN { get; set; }
    public string Message { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

c# json json.net asp.net-web-api

130
推荐指数
4
解决办法
26万
查看次数

无法将JSON数组(例如[1,2,3])反序列化为类型''因为类型需要JSON对象(例如{"name":"value"})才能正确反序列化

我有这个JSON:

[
    {
        "Attributes": [
            {
                "Key": "Name",
                "Value": {
                    "Value": "Acc 1",
                    "Values": [
                        "Acc 1"
                    ]
                }
            },
            {
                "Key": "Id",
                "Value": {
                    "Value": "1",
                    "Values": [
                        "1"
                    ]
                }
            }
        ],
        "Name": "account",
        "Id": "1"
    },
    {
        "Attributes": [
            {
                "Key": "Name",
                "Value": {
                    "Value": "Acc 2",
                    "Values": [
                        "Acc 2"
                    ]
                }
            },
            {
                "Key": "Id",
                "Value": {
                    "Value": "2",
                    "Values": [
                        "2"
                    ]
                }
            }
        ],
        "Name": "account",
        "Id": "2"
    },
    {
        "Attributes": [
            { …
Run Code Online (Sandbox Code Playgroud)

c# arrays serialization json

78
推荐指数
3
解决办法
15万
查看次数

文件为空检查

如何在C#中检查文件是否为空?

我需要这样的东西:

if (file is empty)
{
    // do stuff
}

else
{
    // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

c#

46
推荐指数
5
解决办法
7万
查看次数

无法使用集合初始值设定项初始化类型'',因为它没有实现'System.Collections.IEnumerable'

我创建了一个包含三个类作为属性的类:

public class Feeds
{
    public Rentals Rentals { get; set; }
    public Agent Agents { get; set; }
    public NorthwindService.ServiceReference1.File File { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

var query = from r in ent.Rentals
            join a in ent.Agents on r.ListingAgentID equals a.AgentID
            select new Feeds
            {
                a.AgentID,
                a.Alias,
                a.Bio,
                a.Email,
                a.Fax,
                r.Firstname,
                r.IsStaff,
                r.Languages
            };
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

无法使用集合初始值设定项初始化类型'NorthwindService.WebForm1.Feeds',因为它没有实现'System.Collections.IEnumerable'C:\ Users\NorthwindService\NorthwindService\WebForm1.aspx.cs

请建议解决方案

c# linq asp.net

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

如何在Entity Framework Core 2中播种?

我有两张桌子,我想用种子填充它.

我在Ubuntu中使用ASP.NET Core 2.

如何填充两个表的数据,哪一个与外键连接?流量计有许多注释,注意属于flometer.我想做这样的事情,但它应该存储在数据库中.

new Flowmeter 
{
    Make = "Simple model name",
    SerialNum = 45, 
    Model = "Lor Avon", 
    Notes = new List<Note>()
    {
        new Note() { Value = 45, CheckedAt = System.DateTime.Now },
        new Note() { Value = 98, CheckedAt = System.DateTime.Now }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core .net-core

39
推荐指数
5
解决办法
3万
查看次数

Equals和GetHashCode的最佳策略是什么?

我正在使用域模型,并且正在思考我们在.NET中实现这两种方法的各种方法.你最喜欢的策略是什么?

这是我目前的实施:

public override bool Equals(object obj)
{
    var newObj = obj as MyClass;

    if (null != newObj)
    {
        return this.GetHashCode() == newObj.GetHashCode();
    }
    else
    {
        return base.Equals(obj);
    }
}

// Since this is an entity I can use its Id
// When I don't have an Id, I usually make a composite key of the properties
public override int GetHashCode()
{
    return String.Format("MyClass{0}", this.Id.ToString()).GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)

.net c# equals gethashcode

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

找不到引用的组件"System".(或该事项的任何其他组成部分)

问题:刚刚开始,解决方案之外的任何程序集的所有引用都无法解决,The referenced component 'SomeComponent' could not be found.在尝试构建时.这种情况发生在第三方组件(所有15个左右)以及所有.NET Framework程序集中 - 基本上任何不是同一解决方案中的另一个项目.

试图加载一些其他解决方案产生了同样的问题.但是,创建一个新的WinForms项目没有问题.(从头开始重新安装VS之前,它已经工作了,现在也不起作用.我创建了一个新的WinForms应用程序以及一个WPF应用程序,设计师也无法加载程序集.我尝试了目标3.5和2.0而没有运气.)

我试过的事情:

  • 修复Visual Studio安装
  • 重新启动计算机
  • 用/ resetsettings标志启动VS.
  • 系统还原到2天前,当它已知工作
  • 卸载VS并重新安装
  • SVN全新结账

有没有人有这方面的经验,并知道如何让这个再次工作?我最强大的Google-fu让我失望了,所以我在这里问.如果需要,可以标记社区维基.

更新:我尝试"升级"Windows(到相同的版本),因为我没有看到Vista的修复选项,它仍然是一个禁忌.我重新安装了一切似乎相关的东西.到目前为止,看起来我只是需要备份和重新格式化,我想除非在明天之前出现解决方案.

Update2:我只是备份了数据并重新格式化了,所以我再也无法验证我还没有尝试过的任何想法,所以我只是让赏金自己到达最高投票答案并作为参考之后可能遇到此问题的其他人.

visual-studio-2008 visual-studio

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