小编Sim*_*der的帖子

使用LINQ将List <string>填充为相同的值

我想List<string>用指定次数的相同字符串值填充a .

直接C#是:

List<string> myList = new List<string>();
for (int i = 0; i < 50; ++i)
{
    myList.Add("myString");
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用LINQ执行此操作?

c# linq list

23
推荐指数
3
解决办法
3745
查看次数

使用var或不使用var

可能重复:
C#'var'与特定类型性能

大家好,
我最近看到的代码使用var了很多.
例如:

var myString = GetAnyString();
var myInstance = GetClass();
Run Code Online (Sandbox Code Playgroud)

代替

string myString = GetAnyString();
MyClass myInstance = GetClass();
Run Code Online (Sandbox Code Playgroud)

除了可读性(我认为使用var不是很易读),使用它有什么优点和/或缺点吗?性能如何?

c#

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

DTO的接口

我目前正在开发一个大型Web应用程序,主要包含一个Angular SPA和一个可以访问后端层的OData WebAPI.
我们处于早期阶段并且已经开始实现第一个类,包括一个Model.dll在公共命名空间中的类,以便所有层都可以访问它.
我们现在正在讨论模型中的那些DTO.有人说使用接口是绝对必要的,所以代码是这样的:

namespace MySolution.Common.Model
{
    public interface IPerson
    {
        int Id { get; set; }
        string Name { get; set; }
        ...
    }
}

namespace MySolution.Common.Model
{
    public class PersonDTO : IPerson
    {
        public int Id { get; set; }
        public string Name { get; set; }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

就是这样了.只是简单的DTO,没有更多的智能.
我现在问自己这是否真的是一个好方法,因为我没有看到在这里使用界面的必要性.
这有什么好处?提到了可测试性,但是甚至需要测试DTos吗?依赖注入也应该不重要.
任何启示都会非常有帮助.最后学习新的东西和方法总是很好......

c# interface dto

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

使用Visual Studio扩展设置光标位置

我正在编写自己的Visual Studio 2010 Extension,它可以帮助我导航一个相当大的解决方案.
我已经有一个基于VS Extension的对话框,根据一些搜索条件向我显示一个类名和一个函数名.我现在可以单击此类/方法然后我已经可以打开正确的文件并跳转到该函数.
我现在想要做的是将光标设置在该函数的开头.
我跳转到该函数的代码是:

Solution currentSolution = ((EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0")).Solution;
ProjectItem requestedItem = GetRequestedProjectItemToOpen(currentSolution.Projects, "fileToBeOpened");
if (requestedItem != null)
{
    // open the document
    Window window = requestedItem.Open(Constants.vsViewKindCode);
    window.Activate();

    // search for the function to be opened
    foreach (CodeElement codeElement in requestedItem.FileCodeModel.CodeElements)
    {
        // get the namespace elements
        if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
        {
            foreach (CodeElement namespaceElement in codeElement.Children)
            {
                // get the class elements
                if (namespaceElement.Kind == vsCMElement.vsCMElementClass)
                {
                   foreach (CodeElement classElement in namespaceElement.Children)
                   {
                       try
                       {
                           // …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 envdte visual-studio-sdk visual-studio-extensions

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

无法返回对象

我想通过它的名字找到它来返回这个对象:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器方法是:

[HttpGet]
[ODataRoute("Products/ProductService.GetByName(Name={name})")]
public IHttpActionResult GetByName([FromODataUri]string name)
{
    Product product = _db.Products.Where(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
    if (product == null)
    {
        return NotFound();
    }

    return Ok(product);
}
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.Register()方法是:

public static void Register(HttpConfiguration config)
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<Product>("Products");

    builder.Namespace = "ProductService";
    builder.EntityType<Product>().Collection.Function("GetByName").Returns<Product>().Parameter<string>("Name");

    config.MapODataServiceRoute(routeName: …
Run Code Online (Sandbox Code Playgroud)

c# odata odata-v4

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

静态变量未初始化

我有一个静态变量的奇怪问题,显然没有按原样进行初始化.
我有一个与Windows和Linux一起运行的庞大项目.由于Linux开发人员没有这个问题,我建议这是某种有线Visual Studio的东西.

头文件

class MyClass
{
    // some other stuff here
    ...
    private:
        static AnotherClass* const Default_;
};
Run Code Online (Sandbox Code Playgroud)


CPP文件

AnotherClass* const MyClass::Default_(new AnotherClass(""));
MyClass(AnotherClass* const var)
{
    assert(Default_);
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题Default_始终存在NULL.我还在初始化该变量时尝试了一个断点,但我无法理解它.

另一个班级也存在类似的问题.
CPP文件

std::string const MyClass::MyString_ ("someText");
MyClass::MyClass()
{
    assert(MyString_ != "");
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下MyString_总是空的.所以再次没有初始化.
有没有人对此有所了解?这是Visual Studio设置问题吗?
干杯西蒙

编辑:
我也遇到了静态初始化惨败.但我不确定这是否可能是问题,因为Linux编译器没有问题.在这种情况下编译器不应该以相同的方式做出反应吗?

c++ variables static visual-studio-2008

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

IIS7模块 - 托管还是本机?


由于旧的ISAPI过滤器迟早会死掉,我想将IIS 6中使用的旧ISAPI过滤器重写为一个模块,以便在IIS 7中使用.该模块将在全局范围内使用,这意味着它将在每个模块中使用.站点,在安装了IIS 7.5的Windows Server 2008 R2上,将承载数千个网站并管理大约50个应用程序池.
我现在的问题是,我是否应该在托管或非托管代码中编写该模块?我对托管代码的一个担忧是由于.NET框架开销导致的大量内存消耗.我不知道这会如何影响服务器的性能.
我已经在托管代码和非托管代码中编写了模块.所以这不是我的决定困扰.但是如果没有巨大的缺点,我宁愿用C#编写模块.
关于这个问题的任何建议?

iis-7 module native unmanaged managed

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

将对象转换为指定的类最佳实践

我有一个方法可以获得object各种类型的方法.根据的type了的object,我需要做不同的动作.我目前的代码是这样的:

public void SomeMethod(object obj)
{
    int? someId = null;

    Class1 class1 = obj as Class1;
    Class2 class2 = obj as Class2;
    Class3 class3 = obj as Class3;
    Class4 class4 = obj as Class4;

    if (class1 != null && class1.SomeProperty != null)
    {
        someId = class1.SomeProperty.Id;
    }
    else if (class2 != null && class2.AnotherProperty != null)
    {
        someId = class2.AnotherProperty.AnotherId;
    }
    ...

    AnotherMethod(someId);
}
Run Code Online (Sandbox Code Playgroud)

我对这段代码不太满意,因为我有一些不必要的演员.哪种操作最有效?我在考虑这样的事情:

if (obj.GetType().Equals(typeOf(Class1))
{
    someId = ((Class1)obj).SomeProperty.Id;
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c# casting

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

组合同一列表中的元素

假设我有一个来自数据库的列表,如下所示:

List<Item> list =
{
    new Item
    {
        TypeID = 2,
        Count = 5
    },
    new Item
    {
        TypeID = 2,
        Count = 7
    },
    new Item
    {
        TypeID = 5,
        Count = 2
    }
};
Run Code Online (Sandbox Code Playgroud)

我想用相同的方法总结所有元素,TypeID以便我有一个仅包含两个元素的最终结果列表:

List<Item> list =
{
    new Item
    {
        TypeID = 2,
        Count = 12
    },
    new Item
    {
        TypeID = 5,
        Count = 2
    }
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用LINQ实现这个目标?
干杯
西蒙

c# linq list

0
推荐指数
2
解决办法
106
查看次数