小编Geo*_*voy的帖子

给定一个类型实例,如何在C#中获取泛型类型名称?

给定泛型类型,包括

List<string>
Nullable<Int32>
Run Code Online (Sandbox Code Playgroud)

我如何获得C#的通用名称?

var t = typeof(Nullable<DateTime>);    
var s = t.GetGenericTypeDefinition().Name + "<" + t.GetGenericArguments()[0].Name + ">";
Run Code Online (Sandbox Code Playgroud)

这产生了

"Nullable`1<DateTime>"
Run Code Online (Sandbox Code Playgroud)

, 但是我需要

"Nullable<DateTime>"
Run Code Online (Sandbox Code Playgroud)

.

c# reflection code-generation

30
推荐指数
2
解决办法
8423
查看次数

将计算列转换为常规列

我在SQL Server 2005中的大表中有一个持久的计算列.

我想将它转换为常规列,保持当前值.

我是否必须重新创建列并在事务中更新整个表,或者是否可以只更改计算列规范,以及如何执行此操作?

sql-server calculated-columns

13
推荐指数
2
解决办法
9152
查看次数

如何获取新启动的AWS实例的公共IP地址?

在 AWS 中启动新实例时,公共 IP 地址和 DNS 名称不会作为响应的一部分返回。

正如我在 Web 控制台中看到的那样,创建的计算机已分配公共 IP 和 DNS 名称,但对 SDK 方法调用的响应没有分配 IP 和 DNS 字段值。

我正在使用以下代码:

output, err := ec2session.RunInstances(input)
...
if output.Instances[0].PublicIpAddress == nil {
    //... that is the case
}
Run Code Online (Sandbox Code Playgroud)

我相信公共 IP 地址的分配在某种程度上被延迟了,即使我使用 Web 控制台无法注意到这一点。

创建实例后如何获取公网IP地址和DNS名称?轮询DescribeInstances 是正确的方法吗?

amazon-web-services aws-sdk-go

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

msbuild 脚本中的其他路径

如何为 MSBuild 任务指定其他程序集引用路径?

到目前为止,我有以下脚本,但无法弄清楚如何指定其他搜索路径。

<ItemGroup>
 <ProjectsToBuild Include="..\Main\Main.sln" />
</ItemGroup>

<!-- The follwing paths should be added to reference search paths for the build tasks -->
<ItemGroup>
 <MyAddRefPath Include="$(MSBuildProjectDirectory)\..\..\Build\Lib1" />
 <MyAddRefPath Include="$(MSBuildProjectDirectory)\..\..\Build\Lib2" />
</ItemGroup>

<MSBuild
 Projects="@(ProjectsToBuild)"
 Properties="Configuration=Debug;OutputPath=$(BuildOutputPath)">
</MSBuild>
Run Code Online (Sandbox Code Playgroud)

更新:

请展示一个完整的工作脚本,该脚本调用原始项目,例如具有多个附加参考路径的 SLN。

没有关于如何改进项目结构的建议。我知道如何建造一个好的结构,但现在的任务是建造一个现有的垃圾。

msbuild continuous-integration

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

ThreadAbortException有什么不好的后果?

我最近在遗留代码库中遇到了多线程模式,它依赖于Thread.Abort()取消对外部系统的同时请求的方法.其中一个不良后果是,将超时异常与其他异常类型区分开来并不容易.

ThreadAbortException在多线程控制流程中不使用s 的其他原因是什么?

.net

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

IEnumerator&lt;T&gt;.当前超出 MoveNext() == false

我的图形库中有以下代码:

while(true) {
    using (var i = ancestry.GetAdjacent(current).GetEnumerator())
    {
        if (!i.MoveNext())
            yield break;

        if (i.MoveNext())
            throw new InvalidOperationException("ancestry graph can only have one adjacent vertex for any given vertex");
        // it's a bug, as some enumerators could return null after failed MoveNext().
        current = i.Current;
        if (isSentinel(current))
            yield break;
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码适用于 IEnumerator 的某些实例,但不适用于其他实例(.NET 的所有标准实现,以及具有产量返回的迭代器方法)。

这种行为是否未指定?

如果不是,正确的表示法是什么?将“当前”保留为上一个,还是设置为默认值(T)?

更新:

我探索了 IEnumerator 的一些集合实现、Linq 扩展以及类型化数组:fiddle

根据我的理解,Linq 违反了 IEnumerable 的约定,因为它不会在枚举结束后抛出 Current ,而类型化数组也违反了 IEnumerable 的约定,因为它抛出 on IEnumerable<T>.Current,并且没有为 IEnumerable.Current 指定异常类型。

有人可以澄清一下,文档中所说的“未定义”是什么意思?是否包括抛出未指定的异常:

来自IEnumerator.Current …

.net c# iterator

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