Tag: c#

何时使用扩展方法?

我正在编写Kotlin代码,其中一个特性是扩展方法,除了使用的语法类似于实例方法调用之外,它们与普通函数实际上是相同的。 正常功能 fun blah(x: Int) { println(x) } val f = blah(1) 扩展方法 fun Int.blah() { println(this) } val f = 1.blah() 据我所知,C#扩展方法的工作原理类似。 原则上,通过将第一个参数的类型移动到函数名称的左侧并相应地调整函数体和调用网站(如本例中),可以将任何非零函数写成扩展方法。 我应该把所有的函数写成扩展方法吗? 他们都没有? 我应该使用什么原则来决定哪些函数可以正常写入,哪些写入作为其中一个输入的扩展方法?

JNI:直接缓冲区读写

我有一个小的JNI方法来从屏幕上检索一个像素。 该方法接收来自Java的ByteBuffer,并根据这个问题在C ++ 中写入如何写入和读取从bytebuffer从java传递到jni 。 虽然这个工作,我注意到我写的第一个字节是不正确的,但其他人是: 输入长度从000000000239F238开始为3 颜色是202,97,79 值在Java读取:-54,97,79 这是我的程序的输出。 C ++代码: JNIEXPORT void JNICALL Java_capturePixel(JNIEnv * env, jobject clz, jobject buffer) { jbyte* bufferStart = static_cast<jbyte*>(env->GetDirectBufferAddress(buffer)); jlong inputLength = env->GetDirectBufferCapacity(buffer); HDC hScreenDC = GetDC(nullptr); std::cout << "Input length is " << inputLength << " at start " << &bufferStart << std::endl; COLORREF pixel = […]

你能解释一下这段代码的C#代码?

从Kotlin文档页面: // public final class Gson { // … // public <T> T fromJson(JsonElement json, // Class<T> classOfT) // throws JsonSyntaxException { // … 在上面的代码片断中,我了解除Class<T>之外的所有内容。 我认为这是C#相当于以下内容: public sealed class Gson { public T FromJson<T>(JsonElement json, System.Type Type) { } } 客户端代码会这样说: var gson = new Gson(); var customer = gson.FromJson<Customer>(json, typeof(Customer)); 但我不能确定,因为整个System.Type参数在方法定义中的泛型类型参数T面前似乎是多余的。 另外,在该页面上的相同位置,在下面的代码段中, class.java是什么? inline […]

在c#.net中验证Firebase JWT

我正在尝试验证一个由firebase android客户端获得的json Web令牌,并将其传递给运行.net的服务器 在这里的答案之后,我创建了这些方法来验证令牌并提取uid: public static async Task<string> GetUserNameFromTokenIfValid(string jsonWebToken) { const string FirebaseProjectId = "testapp-16ecd"; try { // 1. Get Google signing keys HttpClient client = new HttpClient(); client.BaseAddress = new Uri("https://www.googleapis.com/robot/v1/metadata/"); HttpResponseMessage response = await client.GetAsync("x509/securetoken@system.gserviceaccount.com"); if (!response.IsSuccessStatusCode) { return null; } var x509Data = await response.Content.ReadAsAsync<Dictionary<string, string>>(); SecurityKey[] keys = x509Data.Values.Select(CreateSecurityKeyFromPublicKey).ToArray(); // […]

LINQ超过功能方法链的好处

在Kotlin Slack上讨论了添加代码树来支持像C#LINQ之类的可能性。 在C#中,LINQ有许多应用程序,但是我只想关注其中的一个(因为其他人已经可能被Kotlin语法覆盖):将SQL查询组合到远程数据库。 先决条件: 我们有一个SQL数据库的数据模式以某种方式表示在代码中,以便静态工具(或类型系统)可以检查SQL查询的正确性(至少是命名) 我们必须以字符串形式生成查询 我们想要一个接近SQL或Java流的语法 问题 :表达式树增加了哪些对于手头任务至关重要的语法? 没有它们,SQL构建器可以有多好?

一个协变类型参数可以在构造函数的输入位置吗?

在这个答案中 , Michael建议将泛型类型参数作为协变量,以允许创建一个空节点。 由于Tree<T>及其子类型的所有属性都是只读的( val ),因此泛型类型参数位于所有输出位置。 但是它在构造函数的输入位置中具有类型参数。 我认为这个代码在C#中不起作用,所以我尝试了一下,而且我感到惊讶,它工作得很好。 // See this: https://stackoverflow.com/questions/36753579/algebraic-data-types-in-kotlin // Short url: https://stackoverflow.com/a/36753782/303685 interface ITree<out T> { } class Tree<T>: ITree<T> { } sealed class Node<T> : Tree<T> { private readonly T _left; private readonly T _right; public Node(T left, T right) { _left = left; _right = right; } public T […]

Kotlin /本机安装错误:未找到'jni.h'文件

我已经安装了openjdk-9-jdk和jre。 我在Compiler args中添加了包含JDK C库文件的文件夹: cCompiler.args "-I/usr/lib/jvm/java-9-openjdk-amd64/include" cCompiler.args "-I/usr/lib/jvm/java-9-openjdk-amd64/include/linux" 在gradle文件中: kotlin-native-master/Interop/Indexer/build.gradle and kotlin-native-master/Interop/Runtime/build.gradle 完整的错误,我得到: 线程“main”中的异常java.lang.Error:/tmp/tmp17962303058800124468.c:2:10:致命错误:未找到'jni.h'文件 为什么会显示这个错误? 谢谢!

将ByteBuffer数组从Java / Kotlin传递到C ++ / V8会导致数据不正确

我试图从Kotlin传递byte[]数据到C ++通过V8 ArrayBuffer传递给JavaScript。 在Kotlin: val buffer = buffer.backingStore.asFloatBuffer() val byteBuffer = ByteBuffer.allocate(buffer.capacity() * 4) byteBuffer.asFloatBuffer().put(buffer) 上面的工作如预期,打印正确。 该数组是[1.1, 2.2, 3.3] 。 所以byteBuffer.array()通过JNI传递给C ++被作为jbyteArray接收。 这里是奇怪的地方。 在C ++中,我尝试将其转换为char并将其传递给JavaScript函数引用: char* buffer = (char*) env->GetByteArrayElements(jbuffer, 0); Local<ArrayBuffer> arrayBuffer = v8::ArrayBuffer::New(isolate_, length); memcpy(arrayBuffer->GetContents().Data(), buffer, length); Local<Value> argv[] = { arrayBuffer }; v8::Local<v8::Context> ctx = hce->context_.Get(hce->isolate_); v8::Function *fn = *(_bufferFn->Get(isolate_)); 在JavaScript中,我收到一个正确长度的ArrayBuffer,但是当我从它初始化一个Float32Array时,我得到[-428967904, -427919360, […]

Kotlin是否提供了其收集界面的任何实现?

我看到Kotlin提供了一些实现集合的接口。 他们列在这个页面上 。 我没有看到Kotlin提供的这些实现。 不过,我确实看到全局名称空间中有一些函数可以帮助我们创建这些集合的实例。 例如为了创建一个可变的数字列表,我们可以说: var numbers : MutableList<Int> = mutableListOf(1, 2, 3); 要创建列表的只读视图,我们可以说: val readOnlyViewOfNumbers : List<Int> = numbers; 或者,要创建一个只读的数字列表,我们可以说: val readOnlyListOfNumbers : List<Int> = listOf(1, 2, 3); 要创建n项目的列表,并用null值初始化每个元素,我们可以这样说: // Sorry, I forgot the function name for this one. It // is not nullableListOf(…) val numbers : List<Int> = nullableListOf(n); 要为数组的每个元素创建一个具有初始化函数的5个元素,我们可以这样说: val myArray […]

相当于c ++类数组的Kotlin

我试图找到在C ++中使用类库的Kotlin等价物 class Widget { public: int x; float w; } Widget data[100];