我们假设我有一个带out参数的函数,但是我不需要它的值.如果给定结果将丢弃,有没有办法传递没有实际参数?
编辑:
虽然这个问题已被选为可选输出参数的重复, 但只有从方法创建者的角度来看才是这样.如果您是该方法的用户,那么您不想让参数成为可选参数,只是在不声明变量的情况下不使用它.虽然这是不可能的,但使用C#7.0可以在方法调用中声明它.所以代替:
int unusedValue;
TryGetValue("key", out unusedValue);
Run Code Online (Sandbox Code Playgroud)
你得到:
TryGetValue("key", out int unusedValue);
Run Code Online (Sandbox Code Playgroud)
甚至:
TryGetValue("key", out _);
Run Code Online (Sandbox Code Playgroud)
这应该作为答案添加,但是:
考虑下面的一段代码:
public class A<T> { }
public class B<T> : A<T> { }
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
var a = typeof(A<>).GenericTypeArguments.Length;
Run Code Online (Sandbox Code Playgroud)
a有价值0,这并不奇怪.然而,这对我来说是出乎意料的:
var b = typeof(B<>).BaseType.GenericTypeArguments.Length;
Run Code Online (Sandbox Code Playgroud)
哪里b有价值1.所以它使用一个不存在的名称"T"关闭,只做GetGenericTypeDefinition它就会再次打开它.这是为什么?
通常我正在使用@RequestScoped或@SessionScoped(从javax.enterprise.context)使用注入对象(例如在faces bean中)@Inject.我也在使用EJB.据我所知,一组无状态EJB副本(池)用于注入对象.存在多个副本的原因是确保不会同时访问EJB的一个实例.在谈到有状态EJB时(同样如我所理解的),这样的一个实例必然会被注入具体的注入点.并且它们是使用@EJB(无状态的)注入的.
我经常可以在网上看到使用@Stateless或@Stateful结合的例子@Scoped.他们是什么意思?
编辑:(试图澄清,因为没有人回应这一刻):
我特别感兴趣的是这样的作用域注释是否会在创建EJB实例的任何时候(以及它们如何)发生变化.根据我的理解:如果我有,带@EJB注释的字段,那里会注入适当类的对象.如果这样的EJB是无状态的,容器只需从预先创建的实例池中获取自由实例.如有必要,可以调整池的大小.它是无状态的,因为不保证在我们的类的方法调用(即具有包含EJB引用的字段的类)之间保留对象.
我们也可以使用有状态EJB,在这种情况下,在方法调用期间会保留一个实例.我认为,每次创建对象时只需注入一次.(还有单例EJB,它在所有对象之间共享).
我在这里找不到EJB的@Scoped注释的目的.
编辑2:
如果要通过EJB和DI(by @Inject)机制注入类,则可以使用这种注释组合.然而,这是特殊情况而不是优雅.我问你是否知道任何其他原因.
编辑3: 请在arjan的回答中看到我的评论.
当我说原子时,我意味着一组指令将在没有任何上下文切换到同一进程的另一个线程的情况下执行(当然必须完成其他类型的交换).我想出的唯一解决方案是暂停所有线程,除了当前在部分之前执行的线程,然后在它之后恢复它们.还有更优雅的方式吗?
我想这样做的原因是收集在多个线程上运行的对象的连贯状态.但是,他们的代码无法更改(它们已经编译),因此我无法在其中插入互斥锁,信号量等.原子操作当然是状态收集(即复制一些变量).
strfld如果将其所有者设置为该类并且关闭JIT检查,则可以使用动态方法中的操作码存储在类的只读字段中.一个例子是在这里.然而,这种方法不适用于来自F#的类,即FSharpOption.请分析以下示例:
using Microsoft.FSharp.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Text;
#if true
using MyType = Microsoft.FSharp.Core.FSharpOption<string>;
#else
using MyType = System.Tuple<string>;
#endif
namespace ConsoleApplication27
{
class Program
{
static void Main(string[] args)
{
var something = new MyType("test");
var dynMethod = new DynamicMethod("ChangeField", MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, typeof(void), new [] { typeof(MyType) }, typeof(MyType), true);
var generator = dynMethod.GetILGenerator();
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldstr, "success");
generator.Emit(OpCodes.Stfld, typeof(MyType).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)[0]);
generator.Emit(OpCodes.Ret);
var …Run Code Online (Sandbox Code Playgroud) 假设我有一个应用程序,用户可以在其中提供用JavaScript编写的脚本来执行某些任务.这是使用Jint完成的.但是,编写错误的脚本会导致Stack Overflow异常JintEngine.Run(),从而导致整个应用程序崩溃.我宁愿告诉用户脚本中的错误.
我试图在另一个应用程序域上运行Jint,这没有帮助,导致SOE上的AFAIK默认操作正在退出进程.可以通过使用CLR托管来改变任何其他方式吗?
我知道我可以运行单独的流程,这是我的后备,但我不想这样做.
我的部分网站只能由授权用户访问.假设用户输入属于仅授权部分的页面a.html.
如果我要使用servlets/JSP,我可以编写一个过滤器来检查用户是否已登录,如果没有,则将其重定向到登录页面.成功登录后,用户将被重定向到他最初想要访问的页面,在本例中为a.html.(页面地址可以存储在请求中).
在JSF 2.0中实现此类场景的正确方法是什么?
假设我有一个工具可以自动删除编译器检测到的无法访问的C#代码.是否存在这样的操作会让我陷入困境的情况?请分享有趣的案例.
在Mono for Android中,我试图获取本地网络中设备的所有IP地址.
我不介意环回,但我对调用DNS不感兴趣.
最好的方式似乎是打电话......
using System.Net.NetworkInformation;
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
Run Code Online (Sandbox Code Playgroud)
...除了它抛出......
System.EntryPointNotFoundException:getifaddrs
有什么建议?