我想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#'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不是很易读),使用它有什么优点和/或缺点吗?性能如何?
我目前正在开发一个大型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吗?依赖注入也应该不重要.
任何启示都会非常有帮助.最后学习新的东西和方法总是很好......
我正在编写自己的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
我想通过它的名字找到它来返回这个对象:
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) 我有一个静态变量的奇怪问题,显然没有按原样进行初始化.
我有一个与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编译器没有问题.在这种情况下编译器不应该以相同的方式做出反应吗?
由于旧的ISAPI过滤器迟早会死掉,我想将IIS 6中使用的旧ISAPI过滤器重写为一个模块,以便在IIS 7中使用.该模块将在全局范围内使用,这意味着它将在每个模块中使用.站点,在安装了IIS 7.5的Windows Server 2008 R2上,将承载数千个网站并管理大约50个应用程序池.
我现在的问题是,我是否应该在托管或非托管代码中编写该模块?我对托管代码的一个担忧是由于.NET框架开销导致的大量内存消耗.我不知道这会如何影响服务器的性能.
我已经在托管代码和非托管代码中编写了模块.所以这不是我的决定困扰.但是如果没有巨大的缺点,我宁愿用C#编写模块.
关于这个问题的任何建议?
我有一个方法可以获得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)
有什么建议?
假设我有一个来自数据库的列表,如下所示:
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实现这个目标?
干杯
西蒙