我有一个叫做的课Questions
.这Questions
有属性QuestionID
和QuestionAnswer
.虽然List of Question
在foreach中迭代这个,但我必须找到.QuestionID = 12
.如果我发现.QuestionID = 12
那我得马上值赋给.QuestionAnswer = "SomeText"
的.QuestionID = 14
.
我不想再次在.QuestionId = 12' to find
.QuestionID = 14`内再次迭代.
有什么方法可以直接.QuestionID = 14
使用LINQ吗?
例如:
For Each mQuestion As Question In _mQuestions
If mQuestion.QuestionId = 12 Then
'Find mQuestion.QuestionID= 14 and insert Somtext to
'mQuestion.QuestionAnswer="SomeText"
End IF
Next
Run Code Online (Sandbox Code Playgroud) 如果程序集包含app.config文件,ConfigurationManager
只要它与通过NUnit-Gui执行的NUnit项目位于同一目录中,就会加载它.为了说明考虑以下文件夹结构.
+ TestFolder
testProject.nunit
+ AssemblyAFolder
assemblyA.dll
assemblyA.dll.config
+ AssemblyBFolder
assemblyB.dll
assemblyB.dll.config
Run Code Online (Sandbox Code Playgroud)
两者AssemblyA
和AssemblyB
锻炼代码调用ConfigurationManager
.如果我在NUnit-Gui中独立运行这些测试程序集,ConfigurationManager
将正确解析本地配置文件.
然而,如果我加载testProject.nunit
到NUnit的桂(其包含两者的引用AssemblyA
和AssemblyB
),ConfigurationManager
查找在配置文件TestFolder
而不管哪个组件当前正在执行.
有没有办法指示NUnit将应用程序配置重新加载到当前程序集目录中的应用程序配置?
以下是内容testProject.nunit
:
<NUnitProject>
<Settings activeconfig="Debug" />
<Config name="Debug" binpathtype="Auto">
<assembly path="AssemblyAFolder\assemblyA.dll" />
<assembly path="AssemblyBFolder\assemblyB.dll" />
</Config>
</NUnitProject>
Run Code Online (Sandbox Code Playgroud) 在调试资源泄漏问题时,我注意到System.Net.WebException
(非一次性类型)包含对System.Net.WebResponse
(一次性类型)的引用.我想知道在显式处理WebResponse
以下代码段中的as 时是否应该处理此引用.
using (WebClient client = new WebClient())
{
WebException ex = Assert.Throws<WebException>(() => client.OpenRead(myUri));
Assert.That(
((HttpWebResponse)ex.Response).StatusCode,
Is.EqualTo(HttpStatusCode.ServiceUnavailable));
}
Run Code Online (Sandbox Code Playgroud)
该WebException.WebResponse
引用是现有引用的副本WebClient
.我认为它会被处理掉,WebClient.Dispose
但事实并非如此,因为WebClient
它不会覆盖受保护的Component.Dispose(bool)
基本方法.实际上,反汇编表明WebResponse
资源从未被处理掉,而是在不再需要时设置为null.
public Stream OpenRead(Uri address)
{
Stream stream2;
// --- removed for brevity ---
WebRequest request = null;
this.ClearWebClientState();
try
{
request = this.m_WebRequest = this.GetWebRequest(this.GetUri(address));
Stream responseStream = (this.m_WebResponse = this.GetWebResponse(request)).GetResponseStream();
// --- removed for brevity ---
stream2 = responseStream; …
Run Code Online (Sandbox Code Playgroud) 我想创建一个副本,IEnumerator<T>
以便我可以从集合中的特定位置重新启动枚举过程.显然,对于实现的集合,这样做没有任何好处IList
,因为我们可以记住感兴趣的索引.
使用yield
语句和Linq函数的组合是否有一种聪明的方法来完成此任务?我找不到合适的Clone()
方法来复制枚举器,并且希望避免使用Enumerable.Skip()
将新的枚举器重新定位到所需的恢复点.
此外,我希望尽可能保持解决方案的通用性,而不必依赖任何具体集合中的状态.
我有一个像这样的课:
class Test{
public:
Test(string value);
Test(bool value);
};
Run Code Online (Sandbox Code Playgroud)
如果我创建这样的对象:
Test test("Just a test...");
Run Code Online (Sandbox Code Playgroud)
bool构造函数被调用!
谁知道为什么?
谢谢
在C#中,我一直在通用列表中执行FindAll,如下所示:
List<group.category> tlist = list.FindAll(p => p.parid == titem.catid);
Run Code Online (Sandbox Code Playgroud)
两个问题,这是执行这样的事情的适当方式,我如何将其转换为VB.Net
我正在寻找创建一个接受任何产生一个任务的函数IEnumerable<T>
.为了说明,请考虑以下函数签名.
void DoWork<TElement>(Task<IEnumerable<TElement>> task)
{ }
Run Code Online (Sandbox Code Playgroud)
现在,我想将此方法称为如下:
Task<int[]> task = Task.FromResult(new[] { 1, 2, 3 });
DoWork(task);
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,因为两种Task
类型不相同,并且任务不存在协方差.但是,我想知道是否有一些聪明的技巧可以让它工作,受以下例子的启发.
async Task<IEnumerable<int>> GetTask()
{
return await Task.FromResult(new int[] { 1, 2, 3 });
}
Run Code Online (Sandbox Code Playgroud)
这里,await
有效地创建了一个带有内联任务结果的新任务,因此产生了类型转换的错觉.
为了给出更详细的示例,我想允许用户DoWork
在转换时没有太多负担来打电话:
// Service proxy method
Task<int[]> GetInts()
{
// simplified for brevity
return Task.FromResult(new[] { 1, 2, 3 });
}
// Service proxy method
Task<long[]> GetLongs()
{
// simplified for brevity
return Task.FromResult(new[] { 100L, 200L, 300L });
} …
Run Code Online (Sandbox Code Playgroud) 是"hello".ToString()
生成一个新字符串还是足够智能返回对同一对象的引用?
我正在使用IdentityServer4来保护多个服务的原型,但需要注意的是,这些服务可能无法迁移(在可预见的未来)以使用ASP.NET Core的OWIN中间件习惯用法.因此,我不能利用许多中间件助手来自动验证JWT,只需提供IdentityServer的着名JWKS端点等等.
如果我可以重建这种行为会很好,我想尽可能利用微软的JwtSecurityTokenHandler
实现.但是,我无法弄清楚如何利用IdentityServer的发现端点提供的类型JsonWebKeySet
和JsonWebKey
类型来提取密钥并执行验证.
JwtSecurityTokenHandler
用于TokenValidationParameters
验证JWT,这些参数需要一个或多个SecurityKey
对象的实例来执行验证.
ClaimsPrincipal ValidateJwt(string token, IdentityModel.Client.DiscoveryResponse discovery)
{
JwtSecurityToken jwt = new JwtSecurityToken(token);
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateAudience = true,
ValidateIssuer = true,
RequireSignedTokens = true,
ValidIssuer = "expected-issuer",
ValidAudience = "expected-audience",
IssuerSigningKeys = discovery.KeySet.Keys /* not quite */
};
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
SecurityToken validatedToken;
return handler.ValidateToken(jwt, validationParameters, out validatedToken);
}
Run Code Online (Sandbox Code Playgroud)
如何从执行必要的转换JsonWebKeySet
,以IEnumerable<SecurityKey>
使可能发生的验证?是否有其他方法(除了OWIN中间件)也可以使用DiscoveryResponse
上面的数据?
(遗憾的是,文档System.IdentityModel.Tokens.Jwt
不是最新的.)
.net ×7
c# ×5
asp.net ×2
linq ×2
vb.net ×2
app-config ×1
async-await ×1
c++ ×1
clone ×1
constructor ×1
dispose ×1
findall ×1
generic-list ×1
ienumerable ×1
jwt ×1
nunit ×1
oauth-2.0 ×1
predicate ×1
string ×1
unit-testing ×1
webclient ×1