类似于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#是否与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) 所以我正在尝试创建一个由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时,您也不能使用"*".
我有一个DOS批处理文件和标签的问题.我一直收到这个错误:
系统找不到指定的批次标签
这是代码:
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) 所以HttpRequestBase类有一个Browser属性,它返回一个HttpBrowserCapabilitiesBase.我们目前在一些MVC基础设施代码中使用此属性来获取浏览器名称和版本号(输出到日志).
我们还有一个使用ServiceStack的api,我希望能够将它挂钩到我们现有的基础架构中.唯一缺少的是能够解析UserAgent标题中的浏览器名称和版本(我感谢IHttpRequest.UserAgent),但需要一种方法来解析它.
我的问题 - 是否可以用UserAgent字符串以某种方式创建HttpBrowserCapabilitiesBase?我在msdn上看到的唯一可用子类型是HttpBrowserCapabilitiesWrapper,其唯一的ctor是另一个HttpBrowserCapabilitiesBase.
我以为这个类可能只是解析UserAgent字符串,所以为什么不存在ctor(字符串)?是否存在可以实现此目的的子类型,工厂或静态方法?
一般来说,我只是为了懒惰而这样做 - 当我知道.Net有这种能力他们只是隐藏它时,我不想写/找到另一个UserAgent解析器.
只是想我会分享这个以防万一其他人遇到这个.
我今天做了类似的事情,花了一些时间来弄清楚为什么这会在运行时引起问题.
这段代码:
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) 我正在寻找可能满足此要求的VB6(或一些WinAPI)中的函数:获取包含环境变量的输入路径字符串,并输出解析了环境变量的路径.
例如:
"%windir%\System32\"
"C:\Windows\System32\"
我当然可以编写自己的解析器,但我想知道这个功能是否已经存在?
这是一个问题的边缘情况,如果有一个简单的方法,我会感到惊讶.
我有一个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是这个问题的正确答案.
我想创建一个没有所有代码隐藏和设计器东西的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>
然而,似乎有一些问题.
我正在尝试创建一个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是接口的实例,如下所示: …
我正在编写一个诊断站点来测试我们的服务器方法.
我希望看到的一件事是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) c# ×5
casting ×2
jquery ×2
vb.net ×2
.net ×1
ajax ×1
ascii ×1
asp.net ×1
async-await ×1
batch-file ×1
breakpoints ×1
closures ×1
cmd ×1
corecursion ×1
cross-domain ×1
ctype ×1
decoding ×1
directcast ×1
encoding ×1
enums ×1
exception ×1
generics ×1
goto ×1
hex ×1
http ×1
javascript ×1
jqxhr ×1
jsonp ×1
label ×1
lambda ×1
rest ×1
rider ×1
sql ×1
vb6 ×1
windows ×1