Tag: C#的

返回IEnumerable <T>与IQueryable <T>

返回IQueryable<T>与IEnumerable<T>什么区别? IQueryable<Customer> custs = from c in db.Customers where c.City == "<City>" select c; IEnumerable<Customer> custs = from c in db.Customers where c.City == "<City>" select c; 这两个都是延期执行,什么时候应该比另一个更受欢迎?

printf宽度说明符保持浮点值的精度

是否有一个printf宽度说明符可以应用于浮点说明符,该说明符将自动将输出格式化为必要的有效数字数 ,以便在重新扫描string时获取原始浮点值? 例如,假设我打印一个float到2位小数的精度: float foobar = 0.9375; printf("%.2f", foobar); // prints out 0.94 当我扫描输出0.94 ,我没有符合标准的保证,我会得到原来的0.9375浮点值(在这个例子中,我可能不会)。 我想要一个方法告诉printf自动将浮点值打印到必要的有效位数,以确保可以将其扫描回传递给printf的原始值。 我可以使用float.h一些macros来派生出传递给printf 的最大宽度 ,但是是否已经存在一个说明符来自动打印到必要数量的有效数字 – 或者至less是最大宽度?

从vector中删除元素

我想使用擦除方法从vector中清除元素。 但是这里的问题是元素不能保证在向量中只出现一次。 它可能会出现多次,我需要清除所有这些。 我的代码是这样的: void erase(std::vector<int>& myNumbers_in, int number_in) { std::vector<int>::iterator iter = myNumbers_in.begin(); std::vector<int>::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector<int> myNmbers; for(int i = 0; i < 2; ++i) { myNmbers.push_back(i); myNmbers.push_back(i); } erase(myNmbers, 1); return […]

自动执行InvokeRequired代码模式

我已经痛苦地意识到需要多长时间在事件驱动的GUI代码中编写以下代码模式 private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } 变为: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else { object1.Visible = true; object2.Visible = false; } } 这是C#中的一个尴尬模式,既要记住又要键入。 有没有人想出了一些快捷方式或构造,这在一定程度上自动化? 如果有一种方法可以将函数附加到对象上,而不需要经过所有这些额外的工作,比如object1.InvokeIfNecessary.visible = truetypes的快捷方式,那将会很酷。 以前的答案已经讨论过每次只调用Invoke()的不切实际的情况,即使如此,Invoke()语法也是效率低下,处理起来还是尴尬的。 那么,有没有人找出任何捷径?

直接施放vs'as'操作符?

考虑下面的代码: void Handler(object o, EventArgs e) { // I swear o is a string string s = (string)o; // 1 //-OR- string s = o as string; // 2 // -OR- string s = o.ToString(); // 3 } 三种types的铸造有什么区别(好吧,第三种不是铸造,但你有意图)。 哪一个应该是首选?

调用超类构造函数的规则是什么?

从子类调用超类构造函数的C ++规则是什么? 例如,我知道在Java中,你必须做它作为子类构造函数的第一行(如果你不这样做,假设隐式调用一个无参的超级构造函数 – 如果缺less的话会给你一个编译错误) 。

EF:包含where子句

由于标题build议我正在寻找一种方法来做一个where子句结合一个包含。 这是我的情况:我负责支持一个充满代码气味的大型应用程序。 改变太多的代码导致错误到处都是,所以我正在寻找最安全的解决scheme。 比方说,我有一个对象总线和一个对象人(公共汽车有一个导航收集的人)。 在我的查询中,我需要select所有的巴士只有乘客醒着。 这是一个简单的虚拟示例 在当前的代码中: var busses = Context.Busses.Where(b=>b.IsDriving == true); foreach(var bus in busses) { var passengers = Context.People.Where(p=>p.BusId == bus.Id && p.Awake == true); foreach(var person in passengers) { bus.Passengers.Add(person); } } 在此代码之后,处理Context,并在调用方法中将所得到的Bus实体映射到DTO类(实体的100%副本)。 此代码会导致多次调用数据库,这是一个不行,所以我在MSDN博客上find了这个解决scheme debugging结果,但当实体映射到DTO(使用AutoMapper)时,这工作得很好我得到一个exception,上下文/连接已closures,该对象无法加载。 (上下文总是closures不能改变这个:() 所以我需要确保选定的乘客已经加载(IsLoaded导航属性也是假的)。 如果我检查乘客集合计数也抛出exception,但也有Passegers集合称为“包裹的相关实体”,其中包含我的过滤对象的集合。 有没有办法将这些包装的相关实体加载到整个集合中? (我不能更改automapper映射configuration,因为这是在整个应用程序中使用)。 有没有另外一种方法来获得积极的乘客? 任何暗示都欢迎… 编辑 Gert Arnold的答案因为数据没有被加载而不起作用。 但是,当我简化它,并删除它被加载的地方。 这是非常奇怪的,因为execute sql在两种情况下返回所有的乘客。 所以在将结果返回到实体时必定存在问题。 Context.Configuration.LazyLoadingEnabled = […]

sizeof(&array)返回什么?

下面的问题: 一个数组的地址是如何等于它在C中的值? #include <stdio.h> #define N 10 char str2[N]={"Hello"}; int main(){ printf("sizeof(str2): %d bytes\n", sizeof(str2)); printf("sizeof(&str2): %d bytes\n", sizeof(&str2)); return 0; } 输出: sizeof(str2): 10 bytes sizeof(&str2): 4 bytes 我知道str2本身就是str2中第一个元素的地址。 而当str2是sizeof的参数时,它将返回整个数组str2的大小。 另外, &str2也是arr str2第一个元素的地址,但是来自于不同types( char (*)[N] ==指向数组的指针)。 但是当&str2是一个sizeof的参数时, &str2如何performance的?

我怎样才能find调用当前方法的方法?

在C#中login时,如何才能知道调用当前方法的方法的名称? 我知道所有关于System.Reflection.MethodBase.GetCurrentMethod() ,但我想在堆栈跟踪下的这一步。 我已经考虑parsing堆栈跟踪,但我希望find一个更清晰的方法,像Assembly.GetCallingAssembly()但方法。

在什么情况下,我使用malloc vs新?

我看到在C + +有多种方式来分配和释放数据,我明白,当你打电话给malloc你应该free打电话,当你使用new运营商,你应该与delete配对,这是一个错误混合两者(例如free()呼叫free()用new运算符创build的东西),但我不清楚什么时候应该使用malloc / free ,何时使用new / delete在我的真实世界程序中。 如果您是C ++专家,请告诉我您在这方面遵循的任何规则或惯例。