किसी fsx फ़ाइल में निम्न कोड का उपयोग करते समय मुझे त्रुटि मिलती है The type seq<'a> is not compatible with the type Collections.Generic.IEnumerable<'a>.

module ReadOnly =
    let private asList<'a> (en:System.Collections.Generic.IEnumerable<'a>) : System.Collections.Generic.IList<'a> = 
        new System.Collections.Generic.List<'a>(en) :>  System.Collections.Generic.IList<'a>
    let private asReadOnly<'a> (en:System.Collections.Generic.IEnumerable<'a>) = 
        new System.Collections.ObjectModel.ReadOnlyCollection<'a>(asList(en))
    let ofSeq<'a> (ss: 'a seq) = asReadOnly<'a>(ss) // <-- ERROR IS HERE ON ARGUMENT 'ss'

netcoreapp2.1 कंसोल एप्लिकेशन में समान कोड का उपयोग करते समय सब ठीक है।

मेरे paket.dependencies में निम्नलिखित शामिल हैं:

source https://www.nuget.org/api/v2
nuget NETStandard.Library
nuget canopy

और मैं निम्नलिखित लोड करता हूं:

#r "packages/NETStandard.Library/build/netstandard2.0/ref/netstandard.dll"
#r "packages/Selenium.WebDriver/lib/netstandard2.0/WebDriver.dll"
#r "packages/canopy/lib/netstandard2.0/canopy.dll"

नोट: मैंने netstandard2.0 को शामिल किया क्योंकि मुझे Object नहीं मिलने में समस्या आ रही थी

1
Devon Burriss 11 अक्टूबर 2018, 07:02

2 जवाब

सबसे बढ़िया उत्तर

मेरे पास पूरा जवाब नहीं है, लेकिन मुझे यही पता चला है। संक्षेप में दुहराना:

  1. NETStandard.Library त्रुटि seq<'a> is not compatible के साथ दिखाता है।
  2. बिना NETStandard.Library त्रुटि 'Object' is required दिखाता है

फिर भी, विकल्प #2 में, मेरे परीक्षणों में एफएसआई के साथ लागू होने पर कोड वास्तव में चलता है। जिसका अर्थ है कि त्रुटि Intellisense मॉड्यूल में एक पुस्तकालय संघर्ष है।

मेरे परीक्षणों में स्क्रिप्ट --noframework विकल्प का उपयोग करते समय भी चलती है और इन दोनों में से किसी एक को संदर्भित करती है:

  • packages/FSharp.Core/lib/net45/FSharp.Core.dll
  • packages/FSharp.Core/lib/netstandard1.6/FSharp.Core.dll

... हालांकि केवल संस्करण 4.3.4 के साथ लेकिन संस्करण 4.5.0 के साथ नहीं

संपादित करें

एक संभावित समाधान स्थानीय जीएसी netstandard.dll के लिए एक स्पष्ट संदर्भ जोड़ रहा है, जैसे:

#r @"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll"

ऐसा लगता है कि Intellisense के लिए समस्या हल हो गई है

1
AMieres 18 अक्टूबर 2018, 03:49

List<'T> की विधि AsReadOnly() का उपयोग न करने का कोई कारण?

let ofSeq<'a> (ss: 'a seq) = (ResizeArray ss).AsReadOnly()
// val ofSeq :
//   ss:seq<'a> -> System.Collections.ObjectModel.ReadOnlyCollection<'a>
1
kaefer 12 अक्टूबर 2018, 23:43