Using `is` operator with value type tuples gives errorC# 7 Pattern Match with a tupleHow do you give a C# Auto-Property a default value?Direct casting vs 'as' operator?Collection was modified; enumeration operation may not executeGet int value from enum in C#How to loop through all enum values in C#?Type Checking: typeof, GetType, or is?Extension methods defined on value types cannot be used to create delegates - Why not?Overriding == operator. How to compare to null?How do I populate current class with new class values?Why `as` is giving null for nullable value types?

number headings

Employer asking for online access to bank account - Is this a scam?

Could a 19.25mm revolver actually exist?

Have 1.5% of all nuclear reactors ever built melted down?

Did people Unsnap to where they were?

How do I partition a matrx into blocks and replace zeros with dots?

Alignment: "Breaking out" of environment (enumerate / minipage)

Who will lead the country until there is a new Tory leader?

Why are C64 games inconsistent with which joystick port they use?

Teacher help me explain this to my students

Why does this if-statement combining assignment and an equality check return true?

Is it true that cut time means "play twice as fast as written"?

Apache redirect to https:/www only partially working

Should breaking down something like a door be adjudicated as an attempt to beat its AC and HP, or as an ability check against a set DC?

My employer faked my resume to acquire projects

Why would Ryanair allow me to book this journey through a third party, but not through their own website?

Do photons bend spacetime or not?

Make 24 using exactly three 3s

Why aren't space telescopes put in GEO?

Where can I find visible/radio telescopic observations of the center of the Milky Way galaxy?

Popcorn is the only acceptable snack to consume while watching a movie

Looking for a soft substance that doesn't dissolve underwater

Python program to find the most frequent letter in a text

What to keep in mind when telling an aunt how wrong her actions are, without creating further family conflict?



Using `is` operator with value type tuples gives error


C# 7 Pattern Match with a tupleHow do you give a C# Auto-Property a default value?Direct casting vs 'as' operator?Collection was modified; enumeration operation may not executeGet int value from enum in C#How to loop through all enum values in C#?Type Checking: typeof, GetType, or is?Extension methods defined on value types cannot be used to create delegates - Why not?Overriding == operator. How to compare to null?How do I populate current class with new class values?Why `as` is giving null for nullable value types?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








18















I am trying to check if an object variable is (int, int) and if so I will use the casted variable so I have tried the codes below:



//this one gives the error
public void MyMethodWithIs(object val)

if(val is (int id, int name) pair)

ConsoleWriteLine($"pair.id, pair.name");



//This one works
public void MyMethodWithAs(object val)

var pair = val as (int id, int name)?;
if(pair!=null)

ConsoleWriteLine($"pair.id, pair.name");




The MyMethodWithIs method gives the error below in the editor:




No suitable deconstruct instance or extension method was found for type




My Question



Why one works fine but the other gives an error at all? I think MyMethodWithIs more readable and suitable to use for my case but I can't use it due to giving an error.










share|improve this question
























  • AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

    – Slai
    May 12 at 20:31












  • @Slai I also tried it, but the same error appears.

    – ilkerkaran
    May 12 at 20:32






  • 4





    if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

    – György Kőszeg
    May 12 at 20:39


















18















I am trying to check if an object variable is (int, int) and if so I will use the casted variable so I have tried the codes below:



//this one gives the error
public void MyMethodWithIs(object val)

if(val is (int id, int name) pair)

ConsoleWriteLine($"pair.id, pair.name");



//This one works
public void MyMethodWithAs(object val)

var pair = val as (int id, int name)?;
if(pair!=null)

ConsoleWriteLine($"pair.id, pair.name");




The MyMethodWithIs method gives the error below in the editor:




No suitable deconstruct instance or extension method was found for type




My Question



Why one works fine but the other gives an error at all? I think MyMethodWithIs more readable and suitable to use for my case but I can't use it due to giving an error.










share|improve this question
























  • AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

    – Slai
    May 12 at 20:31












  • @Slai I also tried it, but the same error appears.

    – ilkerkaran
    May 12 at 20:32






  • 4





    if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

    – György Kőszeg
    May 12 at 20:39














18












18








18


1






I am trying to check if an object variable is (int, int) and if so I will use the casted variable so I have tried the codes below:



//this one gives the error
public void MyMethodWithIs(object val)

if(val is (int id, int name) pair)

ConsoleWriteLine($"pair.id, pair.name");



//This one works
public void MyMethodWithAs(object val)

var pair = val as (int id, int name)?;
if(pair!=null)

ConsoleWriteLine($"pair.id, pair.name");




The MyMethodWithIs method gives the error below in the editor:




No suitable deconstruct instance or extension method was found for type




My Question



Why one works fine but the other gives an error at all? I think MyMethodWithIs more readable and suitable to use for my case but I can't use it due to giving an error.










share|improve this question
















I am trying to check if an object variable is (int, int) and if so I will use the casted variable so I have tried the codes below:



//this one gives the error
public void MyMethodWithIs(object val)

if(val is (int id, int name) pair)

ConsoleWriteLine($"pair.id, pair.name");



//This one works
public void MyMethodWithAs(object val)

var pair = val as (int id, int name)?;
if(pair!=null)

ConsoleWriteLine($"pair.id, pair.name");




The MyMethodWithIs method gives the error below in the editor:




No suitable deconstruct instance or extension method was found for type




My Question



Why one works fine but the other gives an error at all? I think MyMethodWithIs more readable and suitable to use for my case but I can't use it due to giving an error.







c# valuetuple






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 18 at 17:29







ilkerkaran

















asked May 12 at 20:22









ilkerkaranilkerkaran

1,37111325




1,37111325












  • AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

    – Slai
    May 12 at 20:31












  • @Slai I also tried it, but the same error appears.

    – ilkerkaran
    May 12 at 20:32






  • 4





    if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

    – György Kőszeg
    May 12 at 20:39


















  • AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

    – Slai
    May 12 at 20:31












  • @Slai I also tried it, but the same error appears.

    – ilkerkaran
    May 12 at 20:32






  • 4





    if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

    – György Kőszeg
    May 12 at 20:39

















AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

– Slai
May 12 at 20:31






AFAIK value tuples don't store item name information, so there is probably no way to check if the items are id and name. I am guessing it might work without names if (val is (int, int) pair)

– Slai
May 12 at 20:31














@Slai I also tried it, but the same error appears.

– ilkerkaran
May 12 at 20:32





@Slai I also tried it, but the same error appears.

– ilkerkaran
May 12 at 20:32




4




4





if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

– György Kőszeg
May 12 at 20:39






if (val is ValueTuple<int,string> pair) works though. Somewhat related: stackoverflow.com/questions/44706498/…

– György Kőszeg
May 12 at 20:39













1 Answer
1






active

oldest

votes


















17














Using C# 8's pattern matching capabilities, you can write this:



if (val is (int id, int name))

Console.WriteLine($"id: id; name: name");



However this boxes id and name, which is surprising. There's a proposal to optimize this.



Below C# 8, you can write this:



if (val is ValueTuple<int, int> pair)

Console.WriteLine($"id: pair.Item1; name: pair.Item2");



You can of course make it a bit clearer:



if (val is ValueTuple<int, int> pair)

var (id, name) = pair;
Console.WriteLine($"id: id; name: name");



It looks like you can also deconstruct the ValueTuple inline:



if (val is ValueTuple<int, int>(var id, var name))

Console.WriteLine($"id: id; name: name");



... which is somewhat horrific, but appears to be legal.



I might have expected val is (int, int) pair) to work, but it seems nobody's designed this case (yet).






share|improve this answer




















  • 1





    The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

    – ilkerkaran
    May 12 at 20:45











  • @ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

    – canton7
    May 12 at 20:47











  • @ilkerkaran found another way, added to my answer

    – canton7
    May 12 at 20:51











  • I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

    – ilkerkaran
    May 12 at 20:54











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56103160%2fusing-is-operator-with-value-type-tuples-gives-error%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









17














Using C# 8's pattern matching capabilities, you can write this:



if (val is (int id, int name))

Console.WriteLine($"id: id; name: name");



However this boxes id and name, which is surprising. There's a proposal to optimize this.



Below C# 8, you can write this:



if (val is ValueTuple<int, int> pair)

Console.WriteLine($"id: pair.Item1; name: pair.Item2");



You can of course make it a bit clearer:



if (val is ValueTuple<int, int> pair)

var (id, name) = pair;
Console.WriteLine($"id: id; name: name");



It looks like you can also deconstruct the ValueTuple inline:



if (val is ValueTuple<int, int>(var id, var name))

Console.WriteLine($"id: id; name: name");



... which is somewhat horrific, but appears to be legal.



I might have expected val is (int, int) pair) to work, but it seems nobody's designed this case (yet).






share|improve this answer




















  • 1





    The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

    – ilkerkaran
    May 12 at 20:45











  • @ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

    – canton7
    May 12 at 20:47











  • @ilkerkaran found another way, added to my answer

    – canton7
    May 12 at 20:51











  • I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

    – ilkerkaran
    May 12 at 20:54















17














Using C# 8's pattern matching capabilities, you can write this:



if (val is (int id, int name))

Console.WriteLine($"id: id; name: name");



However this boxes id and name, which is surprising. There's a proposal to optimize this.



Below C# 8, you can write this:



if (val is ValueTuple<int, int> pair)

Console.WriteLine($"id: pair.Item1; name: pair.Item2");



You can of course make it a bit clearer:



if (val is ValueTuple<int, int> pair)

var (id, name) = pair;
Console.WriteLine($"id: id; name: name");



It looks like you can also deconstruct the ValueTuple inline:



if (val is ValueTuple<int, int>(var id, var name))

Console.WriteLine($"id: id; name: name");



... which is somewhat horrific, but appears to be legal.



I might have expected val is (int, int) pair) to work, but it seems nobody's designed this case (yet).






share|improve this answer




















  • 1





    The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

    – ilkerkaran
    May 12 at 20:45











  • @ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

    – canton7
    May 12 at 20:47











  • @ilkerkaran found another way, added to my answer

    – canton7
    May 12 at 20:51











  • I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

    – ilkerkaran
    May 12 at 20:54













17












17








17







Using C# 8's pattern matching capabilities, you can write this:



if (val is (int id, int name))

Console.WriteLine($"id: id; name: name");



However this boxes id and name, which is surprising. There's a proposal to optimize this.



Below C# 8, you can write this:



if (val is ValueTuple<int, int> pair)

Console.WriteLine($"id: pair.Item1; name: pair.Item2");



You can of course make it a bit clearer:



if (val is ValueTuple<int, int> pair)

var (id, name) = pair;
Console.WriteLine($"id: id; name: name");



It looks like you can also deconstruct the ValueTuple inline:



if (val is ValueTuple<int, int>(var id, var name))

Console.WriteLine($"id: id; name: name");



... which is somewhat horrific, but appears to be legal.



I might have expected val is (int, int) pair) to work, but it seems nobody's designed this case (yet).






share|improve this answer















Using C# 8's pattern matching capabilities, you can write this:



if (val is (int id, int name))

Console.WriteLine($"id: id; name: name");



However this boxes id and name, which is surprising. There's a proposal to optimize this.



Below C# 8, you can write this:



if (val is ValueTuple<int, int> pair)

Console.WriteLine($"id: pair.Item1; name: pair.Item2");



You can of course make it a bit clearer:



if (val is ValueTuple<int, int> pair)

var (id, name) = pair;
Console.WriteLine($"id: id; name: name");



It looks like you can also deconstruct the ValueTuple inline:



if (val is ValueTuple<int, int>(var id, var name))

Console.WriteLine($"id: id; name: name");



... which is somewhat horrific, but appears to be legal.



I might have expected val is (int, int) pair) to work, but it seems nobody's designed this case (yet).







share|improve this answer














share|improve this answer



share|improve this answer








edited May 14 at 9:10

























answered May 12 at 20:39









canton7canton7

6,74811930




6,74811930







  • 1





    The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

    – ilkerkaran
    May 12 at 20:45











  • @ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

    – canton7
    May 12 at 20:47











  • @ilkerkaran found another way, added to my answer

    – canton7
    May 12 at 20:51











  • I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

    – ilkerkaran
    May 12 at 20:54












  • 1





    The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

    – ilkerkaran
    May 12 at 20:45











  • @ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

    – canton7
    May 12 at 20:47











  • @ilkerkaran found another way, added to my answer

    – canton7
    May 12 at 20:51











  • I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

    – ilkerkaran
    May 12 at 20:54







1




1





The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

– ilkerkaran
May 12 at 20:45





The first code block gives the same error. The second one works but I don't want to use Item1, Item2 etc.

– ilkerkaran
May 12 at 20:45













@ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

– canton7
May 12 at 20:47





@ilkerkaran It works in sharplab - might be new in C# 8. sharplab.io/…

– canton7
May 12 at 20:47













@ilkerkaran found another way, added to my answer

– canton7
May 12 at 20:51





@ilkerkaran found another way, added to my answer

– canton7
May 12 at 20:51













I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

– ilkerkaran
May 12 at 20:54





I think my editor does not let me to use c#8 yet (I think because it is preview). Your updated answer is probably the closest I can get for now.

– ilkerkaran
May 12 at 20:54



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56103160%2fusing-is-operator-with-value-type-tuples-gives-error%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020