Tag: C#的

等待try / catch / finally的一个好的解决scheme?

我需要在catch块中调用一个async方法,然后再次抛出exception(带有堆栈跟踪),如下所示: try { // Do something } catch { // <- Clean things here with async methods throw; } 但不幸的是,你不能用一个catch或finally块来await 。 我知道这是因为编译器没有办法回到catch块去执行你的await指令之后的东西或类似的东西… 我试图使用Task.Wait()来取代await ,我有一个僵局。 我在网上search如何避免这个,并find了这个网站 。 由于我不能更改async方法,也不知道他们是否使用ConfigureAwait(false) ,所以我创build了这些方法,这些方法采用一个Func<Task> ,一旦我们在另一个线程上就启动一个asynchronous方法(以避免死锁)并等待完成: public static void AwaitTaskSync(Func<Task> action) { Task.Run(async () => await action().ConfigureAwait(false)).Wait(); } public static TResult AwaitTaskSync<TResult>(Func<Task<TResult>> action) { return Task.Run(async () => await action().ConfigureAwait(false)).Result; } public […]

如何在C#中创build自己的dynamictypes或dynamic对象?

在那里,例如, ControllerBase类的ViewBag属性,我们可以dynamic地获取/设置值,并添加任何数量的附加字段或属性到这个对象,这是很酷的。我想使用类似的东西,超越MVC应用程序和Controller类在其他types的应用程序。 当我尝试创builddynamic对象并设置它的属性如下所示: 1. dynamic MyDynamic = new { A="a" }; 2. MyDynamic.A = "asd"; 3. Console.WriteLine(MyDynamic.A); 我有RuntimeBinderException与消息属性或索引器'<> f__AnonymousType0.A'不能被分配给 – 它是只读在第2行。我也build议这不是我所期待的。 也许有一些课程可以让我做这样的事情: ??? MyDynamic = new ???(); MyDynamic.A = "A"; MyDynamic.B = "B"; MyDynamic.C = DateTime.Now; MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42; dynamic添加和设置属性。

检查DataRow是否存在c#中的列名?

我想要做这样的事情: private User PopulateUsersList(DataRow row) { Users user = new Users(); user.Id = int.Parse(row["US_ID"].ToString()); if (row["US_OTHERFRIEND"] != null) { user.OtherFriend = row["US_OTHERFRIEND"].ToString(); } return user; } 但是,我收到错误说US_OTHERFRIEND不属于表。 我想简单地检查它是否为空,然后设置值。 没有办法做到这一点?

algorithm:从数组中删除重复整数的有效方法

我在接受微软采访时得到了这个问题。 给定一个随机整数数组,在C中编写一个algorithm,删除重复的数字,并返回原始数组中的唯一数字。 例如:input: {4, 8, 4, 1, 1, 2, 9} 4,8,4,1,1,2,9 {4, 8, 4, 1, 1, 2, 9}输出: {4, 8, 1, 2, 9, ?, ?} 一个警告是,预期的algorithm不应该要求首先sorting数组。 当一个元素被删除时,下面的元素也必须向前移动。 无论如何,元素向前移位的数组尾部元素的值是可以忽略的。 更新:结果必须在原始数组中返回,不应使用帮助器数据结构(例如散列表)。 不过,我猜想保存命令是没有必要的。 更新2:对于那些为什么这些不切实际的约束,这是一个面试问题,所有这些约束在思考过程中讨论,看看我能如何提出不同的想法。

将所有的第一个字母转换为大写,每个单词都要低一些

我有一串文字(大约5-6个字),我需要转换。 目前的文字如下所示: THIS IS MY TEXT RIGHT NOW 我想将其转换为: This Is My Text Right Now 我可以遍历我的string集合,但不知道如何去执行这个文本修改。

Windows服务模板缺失?

当我去创build一个新的项目,“Windows服务”模板不在那里! 有人可以告诉我哪里可以得到它,或提供一个下载链接?

x + =比x = x + a快吗?

我正在阅读Stroustrup的“C ++编程语言”,他说在两种方式中将某些东西添加到variables x = x + a; 和 x += a; 他更喜欢+=因为它最有可能更好的实施。 我认为他的意思是说它的工作也更快。 但是真的吗? 如果依赖于编译器和其他东西,我该如何检查?

使用非静态数据成员和嵌套类构造函数的类内初始化时出错

下面的代码是相当微不足道的,我希望它应该编译好。 struct A { struct B { int i = 0; }; B b; A(const B& _b = B()) : b(_b) {} }; 我用g ++版本4.7.2,4.8.1,clang ++ 3.2和3.3testing了这个代码。 除了这个代码( http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57770 )上的g ++ 4.7.2段错误之外,其他testing编译器给出的错误信息并不能解释太多。 g ++ 4.8.1: test.cpp: In constructor 'constexpr A::B::B()': test.cpp:3:12: error: constructor required before non-static data member for 'A::B::i' has been parsed struct B […]

当我扔东西的时候,它在什么地方存储在内存中?

我明白,当有东西throw n时,堆栈被“解开”到它被捕获的地步,并且在每个函数上下文中堆栈上的类实例的析构函数都被运行(这就是为什么你不应该抛出exception析构函数 – 你可能会抛出第二个)…但是我想知道在存储器中我抛出的对象在这种情况下被存储了吗? 它依赖于实现吗? 如果是这样,那么大多数stream行的编译器是否使用了特定的方法?

这个在结构声明结尾的目的是什么?

我正在窥探我的MSP430微控制器的头文件,并在<setjmp.h>遇到了这个问题: /* r3 does not have to be saved */ typedef struct { uint32_t __j_pc; /* return address */ uint32_t __j_sp; /* r1 stack pointer */ uint32_t __j_sr; /* r2 status register */ uint32_t __j_r4; uint32_t __j_r5; uint32_t __j_r6; uint32_t __j_r7; uint32_t __j_r8; uint32_t __j_r9; uint32_t __j_r10; uint32_t __j_r11; } jmp_buf[1]; /* size = 20 […]