小编csa*_*uve的帖子

在C#中将Int转换为Generic Enum

类似于C#中的Cast int to enum,但我的枚举是Generic Type参数.处理这个问题的最佳方法是什么?

例:

private T ConvertEnum<T>(int i) where T : struct, IConvertible
{
    return (T)i;
}
Run Code Online (Sandbox Code Playgroud)

生成编译器错误 Cannot convert type 'int' to 'T'

完整代码如下,其中value可以包含int或null.

private int? TryParseInt(string value)
{
    var i = 0;
    if (!int.TryParse(value, out i))
    {
        return null;
    }
    return i;
}

private T? TryParseEnum<T>(string value) where T : struct, IConvertible
{
    var i = TryParseInt(value);
    if (!i.HasValue)
    {
        return null;
    }

    return (T)i.Value;
}
Run Code Online (Sandbox Code Playgroud)

c# generics enums casting

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

C#相当于VB.NET的DirectCast?

C#是否与VB.NET的DirectCast等效?

我知道它有()强制转换和'as'关键字,但那些符合CType和TryCast.

需要说明的是,这些关键字执行以下操作:

CType /()强制转换:如果它已经是正确的类型,则强制转换它,否则查找类型转换器并调用它.如果未找到类型转换器,则抛出InvalidCastException.

TryCast /"as"关键字:如果是正确的类型,则抛出它,否则返回null.

DirectCast:如果它是正确的类型,则抛出它,否则抛出InvalidCastException.

在我详细说明之后,有些人仍然回答说()是等价的,所以我会进一步扩展为什么这不是真的.

DirectCast仅允许在继承树上缩小或扩展转换.它不支持像()那样跨不同分支的转换,即:

C# - 这个编译并运行:

//This code uses a type converter to go across an inheritance tree
double d = 10;
int i = (int)d;
Run Code Online (Sandbox Code Playgroud)

VB.NET - 这不是编译

'Direct cast can only go up or down a branch, never across to a different one.
Dim d As Double = 10
Dim i As Integer = DirectCast(d, Integer)
Run Code Online (Sandbox Code Playgroud)

VB.NET与我的C#代码的等价物是CType:

'This compiles and runs
Dim d As Double = …
Run Code Online (Sandbox Code Playgroud)

c# vb.net casting ctype directcast

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

使用jQuery AJAX的WCF REST - 删除/解决相同的源策略

所以我正在尝试创建一个由jQuery调用的C#WCF REST服务.我发现jQuery要求AJAX调用是在相同的源策略下进行的.关于如何进行,我有几个问题.

我已经知道了;
1. JSONP与服务器回调的hacky解决方案
2.拥有跨域代理的服务器开销太多.
3.在浏览器中使用Flash进行调用并在我的WCF服务器根目录下设置crossdomain.xml.

我宁愿不使用这些因为;
1.我不想使用JSON,或者至少我不想限制使用它
2.我想将提供静态页面的服务器与提供应用程序状态的服务器分开.
3.这个时代的闪光是不可能的.

我在想:有没有类似Flash的crossdomain.xml文件适用于jQuery?这个"同源"策略是jQuery的一部分还是特定浏览器中的限制?如果它只是jQuery的一部分,也许我会尝试挖掘代码来解决它.





编辑:
Shreddd得到了相当多的信息,见下文.要在C#中执行此操作,我创建了以下方法,您需要调用所有服务方法:

private void BypassCrossDomain()
{
  WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
}
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,这允许跨站点脚本攻击,当您需要使用您的请求发送第三方cookie时,您也不能使用"*".

javascript ajax rest jquery cross-domain

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

项目骑士 - 打破例外

我找不到JetBrains Project Rider中的选项"Break on Exception".我通常会在IntelliJ中添加一个异常断点,我看到这个:

在此输入图像描述

breakpoints exception rider

10
推荐指数
2
解决办法
2342
查看次数

Windows批处理文件 - 系统找不到指定的批处理标签

问题

我有一个DOS批处理文件和标签的问题.我一直收到这个错误:

系统找不到指定的批次标签

我试过的

  • 两台电脑; WindowsXP和2003 Server.
  • 确保它被编码为ASCII
  • 编辑行继续符的十六进制代码.尝试依次用CR,LF和CRLF替换全部.所有组合都给我同样的错误.
  • 尝试在标签前插入额外的字符,使标签超过512个字符.

这是代码:

cls
@echo off
SET zip=7za a dependencies.7z
call:dozip "c:\temp\dir.txt"

pause
goto exit

:dozip
  echo Testing 1.2.3...
  %zip% %1
goto:eof
:exit
Run Code Online (Sandbox Code Playgroud)

这是带有CRLF(0d 0a)的十六进制.

63 6c 73 0d 0a 53 45 54 20 7a 69 70 3d 37 7a 61 20 61 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 37 7a 0d 0a 63 61 6c 6c 3a 64 6f 7a 69 70 20 …
Run Code Online (Sandbox Code Playgroud)

windows label cmd goto batch-file

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

从UserAgent字符串创建HttpBrowserCapabilitiesBase

所以HttpRequestBase类有一个Browser属性,它返回一个HttpBrowserCapabilitiesBase.我们目前在一些MVC基础设施代码中使用此属性来获取浏览器名称和版本号(输出到日志).

我们还有一个使用ServiceStack的api,我希望能够将它挂钩到我们现有的基础架构中.唯一缺少的是能够解析UserAgent标题中的浏览器名称和版本(我感谢IHttpRequest.UserAgent),但需要一种方法来解析它.

我的问题 - 是否可以用UserAgent字符串以某种方式创建HttpBrowserCapabilitiesBase?我在msdn上看到的唯一可用子类型是HttpBrowserCapabilitiesWrapper,其唯一的ctor是另一个HttpBrowserCapabilitiesBase.

我以为这个类可能只是解析UserAgent字符串,所以为什么不存在ctor(字符串)?是否存在可以实现此目的的子类型,工厂或静态方法?

一般来说,我只是为了懒惰而这样做 - 当我知道.Net有这种能力他们只是隐藏它时,我不想写/找到另一个UserAgent解析器.

.net c# http

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

VB.Net - "With"和Closures不混合

只是想我会分享这个以防万一其他人遇到这个.
我今天做了类似的事情,花了一些时间来弄清楚为什么这会在运行时引起问题.

这段代码:

Public Class foo
  Public bar As String = "blah"
End Class

Public Sub DoInline()
  Dim o As New foo
  Dim f As Func(Of String)
  With o
    f = Function() .bar
  End With
  Try
    Console.WriteLine(f.DynamicInvoke())
  Catch ex As Reflection.TargetInvocationException
    Console.WriteLine(ex.InnerException.ToString)
  End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

抛出NullReferenceException.似乎With使用闭包作为其临时存储,并且在"End With"中,它将闭包的变量设置为Nothing.

这是RedGate Reflector中的代码:

Public Shared Sub DoInline()
    Dim o As New foo
    Dim $VB$Closure_ClosureVariable_7A_6 As New _Closure$__1
    $VB$Closure_ClosureVariable_7A_6.$VB$Local_VB$t_ref$L0 = o
    Dim f As Func(Of String) = New Func(Of String)(AddressOf $VB$Closure_ClosureVariable_7A_6._Lambda$__1)
    $VB$Closure_ClosureVariable_7A_6.$VB$Local_VB$t_ref$L0 = Nothing …
Run Code Online (Sandbox Code Playgroud)

vb.net lambda closures

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

ResolvePath for VB6 - 解决环境变量

我正在寻找可能满足此要求的VB6(或一些WinAPI)中的函数:获取包含环境变量的输入路径字符串,并输出解析了环境变量的路径.

例如:

  • 输入: "%windir%\System32\"
  • 输出: "C:\Windows\System32\"

我当然可以编写自己的解析器,但我想知道这个功能是否已经存在?

这与Spring Framework的" ResolvePath"方法类似.

vb6 environment-variables

6
推荐指数
2
解决办法
4804
查看次数

varchar()中的十六进制字符实际上是ascii.需要解码它

这是一个问题的边缘情况,如果有一个简单的方法,我会感到惊讶.

我有一个MS SQL DB,其字段类型为varchar(255).它包含一个十六进制字符串,当您使用ascii解码器解码它时,它实际上是一个Guid.我知道这听起来很奇怪,但这是一个例子:

该字段的内容:"38353334373838622D393030302D343732392D383436622D383161336634396339663931"

它究竟代表什么:"8534788b-9000-4729-846b-81a3f49c9f91"

我需要一种解码方法,只需将字段的内容更改为它所代表的实际guid.我需要在T-SQL中执行此操作,我不能使用.Net(如果可以的话,这非常简单).

更新:有些人已经回应了可能在一次性语句中工作的方法,我需要一种方法将其放入UPDATE语句中.

例如:UPDATE MyTable SET MyField = MyFunction(MyField)

MyFunction是这个问题的正确答案.

sql encoding hex ascii decoding

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

没有代码隐藏的ASP.Net

我想创建一个没有所有代码隐藏和设计器东西的ASP.Net页面.基本上我想回到ASP经典,但保留CLR和基类库使.Net非常好.我想要一个像这样的页面:


<html>
<body>
<div>

  <%
    int customerID = Request.QueryString["CustomerID"];
    //Customer and DataAccess classes come from an extenal assembly
    Customer customer = DataAccess.GetCustomer(customerID); 
  %>
  You asked for Customer with ID: <%=customerID;%><br />
  Name: <%=customer.Name;%><br />
  Phone: <%=customer.Phone;%><br />


</div>
</body>
</html>

然而,似乎有一些问题.

  • Request对象仅在Page对象中可用.我希望完全删除代码隐藏和设计器页面.
  • 没有intellisense
  • 在我深入研究之前我应该​​注意什么?
  • 不知道如何开始拉入外部库

c# asp.net

4
推荐指数
2
解决办法
3415
查看次数

从链式任务中观察

我正在尝试创建一个Observable,其中每个项目都是通过异步任务生成的.下一项应该通过对前一项结果的异步调用(共同递归)生成.在"生成"这个用语中,这看起来像这样 - 除了Generate不支持异步(它也不支持初始状态的委托).

var ob = Observable.Generate(
   async () => await ProduceFirst(),        // Task<T> ProduceFirst()
   prev => Continue(prev)                   // bool Continue(T);
   async prev => await ProduceNext(prev)    // Task<T> ProduceNext(T)
   item => item
);
Run Code Online (Sandbox Code Playgroud)

作为一个更具体的示例,要通过一次获取100条消息来查看ServiceBus队列中的所有消息,请按如下方式实现ProduceFirst,Continue和ProduceNext:

Task<IEnumerable<BrokeredMessage>> ProduceFirst() 
{
    const int batchSize = 100;
    return _serviceBusReceiver.PeekBatchAsync(batchSize);
}

bool Continue(IEnumerable<BrokeredMessage> prev)
{
    return prev.Any();
}

async Task<IEnumerable<BrokeredMessage>> ProduceNext(IEnumerable<BrokeredMessage> prev) 
{
    const int batchSize = 100;
    return (await _serviceBusReceiver.PeekBatchAsync(prev.Last().SequenceNumber, batchSize + 1)).Skip(1)
}
Run Code Online (Sandbox Code Playgroud)

然后调用.SelectMany(i => i)IObservable<IEnumerable<BrokeredMessage>>把它变成一个IObservable<BrokeredMessage>

其中_serviceBusReceiver是接口的实例,如下所示: …

c# system.reactive async-await corecursion

4
推荐指数
2
解决办法
1070
查看次数

使用JSONP获取jQuery getJSON请求的jqXhr.responseText

我正在编写一个诊断站点来测试我们的服务器方法.
我希望看到的一件事是HTTP状态代码,以及返回的实际有效负载.

当我使用$ .ajax发出CORS请求时,我可以看到jqXhr.responseText来查看有效负载,但是当我使用$ .getJSON来发出JSONP请求时,jqXhr.responseText是未定义的.

有没有办法在使用$ .getJSON和jsonp时看到HTTP有效负载?

function callJavascript(url, callback) {
    var closedData;
    var jqXhr = $.getJSON(url, function (data) {
        closedData = data;
    })
    .success(function() {
        $('#statusCode').text(jqXhr.status); //200
        $('#statusText').text(jqXhr.statusText); //success
        //this is undefined
        $('#responseText').text(jqXhr.responseText); 
        callback(closedData);
    });
};


function someCall()
{
    var callback = function(data) {
        //snip... will pop UI with json object returned
    };
    callJavascript('http://myurl?callback=?', callback);
};
Run Code Online (Sandbox Code Playgroud)

jquery jsonp jqxhr

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